導(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: int32s.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]?---> 12s.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)

以字典的形式構(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)

從文件中讀取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)

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ù)必須是行),對所有行都有效。








