03.pandas基礎(chǔ)操作

3、pandas基礎(chǔ)操作

1. pandas 介紹

1.1 為什么學(xué)習(xí)pandas

  • numpy已經(jīng)可以幫助我們進(jìn)行數(shù)據(jù)的處理了,那么學(xué)習(xí)pandas的目的是什么呢?
    • numpy能夠幫助我們處理的是數(shù)值型的數(shù)據(jù),當(dāng)然在數(shù)據(jù)分析中除了數(shù)值型的數(shù)據(jù)還有好多其他類型的數(shù)據(jù)(字符串, 時間序列),那么pandas就可以幫我們很好的處理除了數(shù)值型的其他數(shù)據(jù)!

什么是pandas?

  • 首先先來認(rèn)識pandas中的兩個常用的類
    • Series
    • DataFrame

2. Series 的簡單使用

Series是一種類似與一維數(shù)組的對象,由下面兩個部分組成:

  • values:一組數(shù)據(jù)(ndarray類型)
  • index:相關(guān)的數(shù)據(jù)索引標(biāo)簽

2.1 Series的創(chuàng)建方式

# 導(dǎo)入Series、pandas相關(guān)包
from pandas import Series

(1)由列表創(chuàng)建

s = Series(data=[1,2,3,'four'])
s
image.png

(2)由numpy數(shù)組創(chuàng)建

import numpy as np
s = Series(data=np.random.randint(0,100,size=(3,)))
s
image.png

(3)index 用來指定顯示索引

s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
image.png

(4)使用字典創(chuàng)建

dic ={
    '語文':80,
    '數(shù)學(xué)':70,
    '英語':60
}
s = Series(data=dic)
s
image.png

2.2 Series索引的作用

(1)顯示索引可以增強Series的可讀行

(2)Series的索引和切片

# 查看隱式索引為0的行數(shù)據(jù)
s[0]
image.png
# 查看顯示索引為'語文'的行數(shù)據(jù)
s.語文
image.png
# 查看0到2行的行數(shù)據(jù)
s[0:2]
image.png

2.3 Series的常用屬性

(1)shape 查看Series形狀

image.png

(2)size 查看Series的大小

image.png

(3)index 返回Series索引

image.png

(4)values 返回Series值

image.png

(5)dtype 返回元素類型

image.png

2.4 Series的常用方法

創(chuàng)建一個樣本

s = Series(data=np.random.randint(60,100,size=(10,)))
s
image.png

(1)head()顯示前N個數(shù)組 ,默認(rèn)是5個

s.head()
image.png

(2)tail() 顯示后n個

s.tail(3) #顯示后n個
image.png

(3)unique() 去重

s.unique() #去重
image.png

(4)isnull() 判斷每一個元素是否為空

s.isnull()  #判斷每一個元素是否為空
image.png

(5)notnull() 判斷每一個元素是否為非空

s.notnull()  #判斷每一個元素是否為非空
image.png

2.5 Series 的算術(shù)運算

索引一致的元素進(jìn)行算術(shù)運算,否則為空

s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','d','c'])
s = s1 + s2
s
image.png

3. DataFrane的簡單使用

DataFrame是一個【表格型】的數(shù)據(jù)結(jié)構(gòu)。DataFrame由按一定順序排列的多列數(shù)據(jù)組成。設(shè)計初衷是將Series的使用場景從—維拓展到多維。DataFrame既有行索引,也有列索引。

  • 行索引 :index
  • 列索引: columns值: values

3.1 DataFrame的創(chuàng)建

# 導(dǎo)入DataFrame 模塊
from pandas import DataFrame

(1)ndarray創(chuàng)建

df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
df
image.png

(2)字典創(chuàng)建

dic ={
    'name':['a','d','c'],
    'age':[11,12,13]
}
df = DataFrame(data=dic,index=['a','b','c'])
df
image.png

3.2 DataFrame 的屬性

(1)values 查看DataFrame 的值

df.values
image.png

(2)columns 查看DataFrame 的列索引

df.columns
image.png

(3)index 查看DataFrame 的行索引

df.index
image.png

(4)shape 查看DataFrame的形狀

df.shape
image.png

3.3 練習(xí)

根據(jù)以下考試成績表,創(chuàng)建一個DataFrame,命名為df:

張三 李四
語文 150 50
數(shù)學(xué) 150 50
英語 150 50
理綜 150 50
dic ={
    '張三': [150,150,150,300],
    '李四': [0,0,0,0]
}
s = DataFrame(data=dic,index=['語文','數(shù)學(xué)','英語','理綜'])
s
image.png

3.4 DataFrame索引操作

創(chuàng)建樣本

df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
df
image.png

(1)對列進(jìn)行索引取值

df['a']  #取單列,如果df有顯示的索引,通過索引機制取行或者列的時候只可以使用顯示索引
image.png

(2)取多列

df[['a','c']] #取多列
image.png

(3)iloc:通過隱式索引取行

#取單行
df.iloc[0]
image.png
# 取單列
df.iloc[:,0]
image.png
#取多行
df.iloc[[0,3,5]]
image.png
#取多列
df.iloc[:,[0,2,3]]
image.png
#取第0行第三列的數(shù)據(jù)
df.iloc[0,3]
image.png
#取多個元素
df.loc[[1,3,5],'c']
image.png

(4)loc:通過顯示索引取行

#取單行
df.loc[:,'a']
image.png
#取多列
df.loc[:,['a','b']]
image.png
# 取多個元素
df.loc[[1,3,5],'c']
image.png

3.5 DataFrame的切片操作

(1)對行進(jìn)行切片

df[0:3]
image.png

(2)對列進(jìn)行切片

df.iloc[:,0:2]
image.png

(3)對行和列進(jìn)行切片

df.iloc[0:2,0:2]
image.png

3. 6 總結(jié):

  • df 索引和切片操作
    • 索引:
      • df[col]:取列
      • df.loc[index]:取列,顯示索引
      • df.iloc[index]:取列,隱式索引
      • df.iloc[index,col]:取元素,隱式索引
    • 切片:
      • df[index1,index2]:切行
      • df.iloc[:,col1:col2]:切列

3.7 練習(xí)

要求:

1.假設(shè)ddd是期中考試成績,ddd2是期末考試成績,請自由創(chuàng)建ddd2,并將其與ddd相加,求期中期末平均值

2.假設(shè)張三期中考試數(shù)學(xué)被發(fā)現(xiàn)作弊,要記為0分,如何實現(xiàn)?

3.李四因為舉報張三作弊立功,期中考試所有科目加100分,如何實現(xiàn)?

4.后來老師發(fā)現(xiàn)有一道題出錯了,為了安撫學(xué)生情緒,給每位學(xué)生每個科目都加10分,如何實現(xiàn)?

(1)創(chuàng)建數(shù)據(jù)結(jié)構(gòu)

dic1 ={
    '張三':[100,100,100,100],
    '李四':[80,80,80,80]
}

dic2 ={
    '張三':[80,80,80,80],
    '李四':[100,100,100,100]
}

#期中
ddd = DataFrame(data=dic1,index=['語文','數(shù)學(xué)','英語','理綜'])
#期末
ddd2 = DataFrame(data=dic2,index=['語文','數(shù)學(xué)','英語','理綜'])

(2)計算期中期末的平均值

#總分
count = ddd + ddd2

#平均值
ave = count / 2
image.png

(3)張三期中考試數(shù)學(xué)被發(fā)現(xiàn)作弊,要記為0分

#張三期中考試數(shù)學(xué)記為0分
ddd.loc['數(shù)學(xué)','張三']=0
ddd
image.png

(4)將李四所有成績加100

#將李四所有成績加100
ddd.loc[:,'李四']+=100   #ddd['李四'] += 100
ddd
image.png

(5)給所有學(xué)生每個科目加10分

#給所有學(xué)生每個科目加10分
ddd.loc[:]+=10   # ddd += 10
ddd
image.png

3.8 時間數(shù)據(jù)類型的轉(zhuǎn)換

  • pd.to_datetime(col) 時間數(shù)據(jù)類型的轉(zhuǎn)換

(1)創(chuàng)建樣本

import pandas as pd
dic = {
    'time':['2021-9-8','2021-8-8','2021-7-8'],
    'temp':[10,20,30]
}
df = DataFrame(data=dic)
df
image.png

(2)查看time列的類型

#查看time列的類型  字符串類型
df['time'].dtype
image.png

(3)將time列轉(zhuǎn)為時間類型

df['time'] = pd.to_datetime(df['time'])
df
image.png
  • 將time列作為原數(shù)據(jù)的行索引 inplace是否覆蓋原df
df.set_index('time',inplace=True)
df
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容