最后一次更新日期: 2019/3/21
pandas
是基于numpy
的數(shù)據(jù)分析庫署照,提供一些更易用的數(shù)據(jù)模型和大量高效的統(tǒng)計方法。
使用前先導(dǎo)入模塊:
import pandas as pd
按需導(dǎo)入以下模塊:
import numpy as np
import matplotlib.pyplot as plt
1. 索引查找
(1). 索引器格式
單值選取:[value,...]
多值選取:[[value1,value2],...]
范圍選取:[start:end:step,...]
start
表示區(qū)間的開始剂陡,默認(rèn)值0狈涮,end
表示區(qū)間的結(jié)束(不包含),默認(rèn)值等于軸長度鸭栖,step
表示選取的步長薯嗤,默認(rèn)值1,采用默認(rèn)值的參數(shù)可以省略纤泵,[:,...]
表示對應(yīng)軸方向上全部選取。
pandas中索引器的格式與numpy差不多镜粤,但用法有區(qū)別捏题。pandas除了numpy的位置索引,還增加了標(biāo)簽索引肉渴,雖然可以對Series
和DataFrame
直接使用索引器公荧,但用法被嚴(yán)格限制,建議改用iloc
和loc
方法進(jìn)行索引同规。
(2). 直接索引
In [157]: df=pd.DataFrame(np.arange(1,10).reshape((3,3)),columns=['col1','col2','col3'],index=['row1','row2','row3'])
In [158]: df[0:3:2]
Out[158]:
col1 col2 col3
row1 1 2 3
row3 7 8 9
In [161]: df['row1':'row3':2]
Out[161]:
col1 col2 col3
row1 1 2 3
row3 7 8 9
In [162]: df['col2']
Out[162]:
row1 2
row2 5
row3 8
Name: col2, dtype: int32
In [163]: df[['col1','col3']]
Out[163]:
col1 col3
row1 1 3
row2 4 6
row3 7 9
In [168]: df['col2'][1:3]
Out[168]:
row2 5
row3 8
Name: col2, dtype: int32
直接索引提供了有限的幾種使用方式:按行位置進(jìn)行索引切片循狰、按行標(biāo)簽進(jìn)行索引切片、按列標(biāo)簽取列券勺、按列標(biāo)簽列表取多列绪钥、布爾索引篩選行、索爾索引篩選元素等关炼。
一次索引器只能使用一種方式程腹,不能行列同時操作,如有需要儒拂,可進(jìn)行連續(xù)索引寸潦。
(3). loc和iloc索引
In [169]: df.loc['row1','col1']
Out[169]: 1
In [170]: df.loc['row1':'row3':2,'col1':'col3':2]
Out[170]:
col1 col3
row1 1 3
row3 7 9
In [185]: df.iloc[0,0]
Out[185]: 1
In [186]: df.iloc[0:3:2,0:3:2]
Out[186]:
col1 col3
row1 1 3
row3 7 9
loc
專用于標(biāo)簽索引,iloc
專用于位置索引社痛,索引器可接收單值见转、列表、范圍蒜哀、布爾索引斩箫,可同時索引行和列。
(4). 布爾索引
In [190]: df>5
Out[190]:
col1 col2 col3
row1 False False False
row2 False False True
row3 True True True
In [191]: df[df>5]
Out[191]:
col1 col2 col3
row1 NaN NaN NaN
row2 NaN NaN 6.0
row3 7.0 8.0 9.0
In [192]: df['col1']>2
Out[192]:
row1 False
row2 True
row3 True
Name: col1, dtype: bool
In [193]: df.loc[df['col1']>2]
Out[193]:
col1 col2 col3
row2 4 5 6
row3 7 8 9
In [196]: df.loc[df['col1']>2,df.iloc[1]>5]
Out[196]:
col3
row2 6
row3 9
In [208]: df.iloc[df['col1'].values>2]
Out[208]:
col1 col2 col3
row2 4 5 6
row3 7 8 9
布爾索引是一種比較特殊的索引凡怎,通過對pandas或numpy的數(shù)據(jù)模型進(jìn)行邏輯運(yùn)算得到校焦,與源數(shù)據(jù)結(jié)構(gòu)相同,數(shù)據(jù)類型為bool
统倒,用于標(biāo)識每個元素是否符合邏輯運(yùn)算的條件寨典。在索引器中使用布爾索引可以篩選出符合條件的數(shù)據(jù)。
在直接索引時房匆,二維布爾索引可以用于篩選DataFrame
的元素耸成,形狀不變报亩,不符合條件的元素會被替換為NaN
,這一點(diǎn)和numpy不一樣井氢,numpy進(jìn)行同樣形式的篩選時會將符合條件的元素構(gòu)造為新的一維數(shù)組返回弦追;一維布爾索引只可以用于篩選行數(shù)據(jù);
在使用loc
索引時花竞,不能使用二維布爾索引劲件,只能針對每個軸使用一維布爾索引,并且必須是由Series
運(yùn)算得到的帶有標(biāo)簽索引的布爾索引约急;
在使用iloc
索引時零远,同樣不能使用二維布爾索引,只能針對每個軸使用一維布爾索引厌蔽,并且必須是由一維ndarray
運(yùn)算得到的不含標(biāo)簽索引的布爾索引(Series.values
可得到對應(yīng)的ndarray
)牵辣。
(5). 指定值查找
In [141]: df=pd.DataFrame({'a':[np.nan,1,2],'b':[3,np.nan,4]})
In [142]: df
Out[142]:
a b
0 NaN 3.0
1 1.0 NaN
2 2.0 4.0
In [143]: df.isin([2,3])
Out[143]:
a b
0 False True
1 False False
2 True False
In [144]: df.isna()
Out[144]:
a b
0 True False
1 False True
2 False False
isin
方法用于查找存在于指定列表中的值,isna
方法用于查找NaN值奴饮,兩方法都會返回布爾索引纬向,通常結(jié)合索引器使用。
2. 表連接
pandas提供了類似于sql的join
戴卜、merge
逾条、concat
方法進(jìn)行表連接。
(1). 索引連接
In [227]: df1=pd.DataFrame([[1,2],[3,4]],columns=['col1','col2'],index=[1,0])
In [228]: df2=pd.DataFrame([[5,6],[7,8]],columns=['col3','col4'],index=[0,1])
In [229]: df1.join(df2,how='inner')
Out[229]:
col1 col2 col3 col4
1 1 2 7 8
0 3 4 5 6
join
方法根據(jù)索引進(jìn)行表連接投剥,how
參數(shù)指定連接方式膳帕,有inner
內(nèi)連接、outer
外連接薇缅、left
左連接危彩、right
右連接 這幾種,默認(rèn)為left
泳桦。
此處的join
和sql中的join并不一樣汤徽。
(2). 鍵連接
In [233]: df1=pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6]})
In [234]: df2=pd.DataFrame({'col2':[4,5,7],'col3':[1,2,2]})
In [235]: df1.merge(df2)
Out[235]:
col1 col2 col3
0 1 4 1
1 2 5 2
In [237]: df1.merge(df2,how='left',left_on='col1',right_on='col3')
Out[237]:
col1 col2_x col2_y col3
0 1 4 4.0 1.0
1 2 5 5.0 2.0
2 2 5 7.0 2.0
3 3 6 NaN NaN
merge
方法根據(jù)指定鍵(列)進(jìn)行表連接,通過on
參數(shù)(相同鍵)或left_on
和right_on
參數(shù)(不同鍵)指定灸撰,默認(rèn)會將兩表中都存在的鍵作為連接鍵谒府;how
參數(shù)指定連接方式,有inner
內(nèi)連接浮毯、outer
外連接完疫、left
左連接、right
右連接 這幾種债蓝,默認(rèn)為inner
壳鹤。
該方法才是sql中join的等效方法。
(3). 拼接
In [239]: df1=pd.DataFrame({'col1':[1,2,3],'col2':[4,5,6]})
In [240]: df2=pd.DataFrame({'col2':[4,5,7],'col3':[1,2,2]})
In [241]: pd.concat([df1,df2])
Out[241]:
col1 col2 col3
0 1.0 4 NaN
1 2.0 5 NaN
2 3.0 6 NaN
0 NaN 4 1.0
1 NaN 5 2.0
2 NaN 7 2.0
In [242]: pd.concat([df1,df2],join='inner')
Out[242]:
col2
0 4
1 5
2 6
0 4
1 5
2 7
In [243]: pd.concat([df1,df2],axis=1)
Out[243]:
col1 col2 col2 col3
0 1 4 4 1
1 2 5 5 2
2 3 6 7 2
用于拼接表饰迹,等效于sql中的union all芳誓。
axis
參數(shù)指定用于拼接的軸余舶,默認(rèn)0;join
參數(shù)指定其他軸的處理方式锹淌,inner
表示只返回都存在的項(xiàng)匿值,outer
表示全部返回,默認(rèn)outer
赂摆。
拼接后的結(jié)果表中可能會有行索引或列索引上的重復(fù)挟憔,可以視需要重整索引。