Python 知識回顧之 Pandas(1)

導(dǎo)入pandas
import pandas as pd

Pandas的數(shù)據(jù)結(jié)構(gòu)

1.Series

Series是一種類似于一維數(shù)組的對象,由兩部分組成

  • values: 一組數(shù)據(jù)(ndarry類型)
  • index: 相關(guān)的數(shù)據(jù)索引標(biāo)簽
1)Series的創(chuàng)建

(1)由列表或numpy數(shù)組創(chuàng)建
&emps;默認(rèn)索引為0到N-1的整數(shù)型索引

data1 = [1, 2, 3, 4, 5]
s1 = Series(data=data1) # 索引為0-4

index = ["lucy","mery","tom","jack","tony"]
data = np.random.randint(0,100,size=5)
s3 = Series(data=data, index=index, name="Score",dtype=np.float)


image.png

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

dic = { "lucy":60, "mery":80, "tom":76, "tony":92 }
Series(data=dic, index=["lucy","mery","nokey"])


image.png

字典的鍵會被自動設(shè)置為索引
如果顯示指定index,index的優(yōu)先級會高于字典的鍵

2)Series的索引和切片

可以使用中括號取單個索引(此時返回的是元素類型),或者中括號里一個列表取多個索引(此時返回的仍然是一個Series類型)。分為顯示索引和隱式索引:

data = np.random.randint(0,100,size=5)
index = list("ABCDE")
s = Series(data=data, index=index)


image.png

(1)顯式索引:

1.字典訪問
s["A"]?---> 12

2.屬性訪問
s.A?---> 12

3.Series訪問
s.loc["A"]?---> 12

4.多元素訪問,使用列表做索引
s.loc[["A", "B"]]
---> A??12
??B??82
??dtype: int32

5.Bool列表訪問
s.loc[[True, False,True, False,False]]
---> A??12
??C?? 6
??dtype: int32

6.使用values屬性獲取series對象的值
s[s.values > 60]
---> B??82
??E??80
??dtype: int32

s.loc[s.values > s.values.mean()]
---> B??82
??D??49
??E??80
??dtype: int32

(2)隱式索引

1.數(shù)組訪問
s[0] ?---> 12

2.series隱式訪問
s.iloc[0]?---> 12

s.iloc[[0,1,3,1]]
---> A??12
??B??82
??D??49
??B??82
??dtype: int32

切片

顯式索引切片
s.loc["A":"C"]
---> A??12
??B??82
??C??6
??dtype: int32

隱式索引切片(左閉右開)
s.iloc[0:2]
---> A??12
??B??82
??dtype: int32

3)Series 的屬性
  • s.shape ?形狀
  • s.size ?長度
  • s.index ?索引
  • s.values ?值
  • s.head(n) ?查看前n個值
  • s.tail(n) ? 查看后n個值

可以使用pd.isnull(),pd.notnull(),或自帶isnull(),notnull()函數(shù)檢測缺失數(shù)據(jù)

s[s.notnull()] # 檢測空值
s.isnull().any() # 檢查是否存在空值

  • s.name ?顯示名稱
  • s.sort_values() ? 根據(jù)值排序
  • s.sort_index() ? 根據(jù)索引排序
  • s.value_counts() ?統(tǒng)計每個值出現(xiàn)次數(shù)

Series的運算:
在運算中自動對齊不同索引的數(shù)據(jù),如果索引不對應(yīng),補NaN

  • s.add() ?加
  • s.sub() ?減
  • s.mul() ?乘
  • s.div() ?除

2.DataFrame

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

  • 行索引:index
  • 列索引:columns
  • 值:values(numpy的二維數(shù)組)

1)DataFrame的創(chuàng)建

最常用的方法是傳遞一個字典來創(chuàng)建。DataFrame以字典的鍵作為每一【列】的名稱,以字典的值(一個數(shù)組)作為每一列。

此外,DataFrame會自動加上每一行的索引(和Series一樣)。

同Series一樣,若傳入的列與字典的鍵不匹配,則相應(yīng)的值為NaN。

index = ["lucy","mery","tom","jack","rose","tony"]
columns = ["python","java"]
data = np.random.randint(0,100,size=(6,2))
df = DataFrame(data=data, index=index, columns=columns)

image.png

以字典的形式構(gòu)造dataframe

dic = {
"python":np.random.randint(0,100,size=6),
"java":np.random.random(size=6),
"name":["lucy","mery","tom","jack","rose","tony"]
}
df2 = DataFrame(data=dic)

image.png
從文件中讀取DataFrame對象

df = pd.read_excel("文件名.xlsx"sheet_name="partitions",header=1, index_col=None)

  • sheet_names 制定sheet的索引或名字
  • header 指定哪些行作為列標(biāo)簽讀取
  • index_col 指定哪些列作為行標(biāo)簽讀取
使用Series構(gòu)造DataFrame

python = Series(data=np.random.randint(0,100,size=5), index=["lucy","mery","tom","jack","rose"], name="Python")
DataFrame(data=python)

image.png

2)DataFrame的索引

dic = {
"python":np.random.randint(0,100,size=6),
"java":np.random.random(size=6),
"name":["lucy","mery","tom","jack","rose","tony"]
}
df = DataFrame(data=dic)


image.png

DataFrame訪問
df.loc[2,"name"] = "JAREY123"


image.png

字典訪問
df["name"]
屬性訪問
df.name


image.png

以列表作為索引訪問,返回的是一個DataFrame對象
df[["java","python"]]


image.png

隱式訪問,是把dataFrame看成普通的二維數(shù)組,所以訪問邏輯與二維數(shù)組相同
df.iloc[:,[0,1]]


image.png

顯式索引訪問
df.loc[:,"name"]


image.png

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

  • 通過類似字典的方式
  • 通過屬性的方式

可以將DataFrame的列獲取為一個Series。返回的Series擁有原DataFrame相同的索引,且name屬性也已經(jīng)設(shè)置好了,就是相應(yīng)的列名。

(2) 對行進(jìn)行索引

  • 使用.ix[]來進(jìn)行行索引
  • 使用.loc[]加index來進(jìn)行行索引
  • 使用.iloc[]加整數(shù)來進(jìn)行行索引

同樣返回一個Series,index為原來的columns。

(3) 對元素索引的方法

  • 使用列索引
  • 使用行索引(iloc[3,1]相當(dāng)于兩個參數(shù);iloc[[3,3]] 里面的[3,3]看做一個參數(shù))
  • 使用values屬性(二維numpy數(shù)組)

3)DataFrame的運算

(1) DataFrame之間的運算

同Series一樣:
在運算中自動對齊相同索引的數(shù)據(jù)
如果索引不對應(yīng),則補NaN

Python 操作符與pandas操作函數(shù)的對應(yīng)表:

Python Operator Pandas Method(s)
+ add()
- sub(), subtract()
* mul(), multiply()
/ truediv(), div(), divide()
// floordiv()
% mod()
** pow()

(2) Series與DataFrame之間的運算

使用Python操作符:以行為單位操作(參數(shù)必須是行),對所有行都有效。(類似于numpy中二維數(shù)組與一維數(shù)組的運算,但可能出現(xiàn)NaN)

使用pandas操作函數(shù):

  • axis=0:以列為單位操作(參數(shù)必須是列),對所有列都有效。
  • axis=1:以行為單位操作(參數(shù)必須是行),對所有行都有效。
?著作權(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)容