Pandas 是python的數(shù)據(jù)分析庫,讓數(shù)據(jù)處理變得非常簡(jiǎn)單,處理速度上也有很多優(yōu)化,比python 的內(nèi)置方法相比有很大的優(yōu)勢(shì)。
先學(xué)兩個(gè)網(wǎng)站:
- python data analysis library
- 十分鐘入門Pandas:10 Minutes to pandas
- [Pandas函數(shù)使用總結(jié)](https://mp.weixin.qq.com/s/jCRTBteONIBDmvpieQlP6A)
約定俗成導(dǎo)入:
from pandas import Series,DataFrame
Series可以存儲(chǔ)任意數(shù)據(jù)類型:
- 是一位標(biāo)記數(shù)組,numpy的一位array;
- Python基本數(shù)據(jù)結(jié)構(gòu)list
DataFrame是二維標(biāo)記數(shù)據(jù)結(jié)構(gòu),列可以是不同的數(shù)據(jù)類型,可接收多種輸入
s = pd.Series([1,3,5,np.nan,6,8])
df=pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
查看檢查數(shù)據(jù)
df.dtypes : 查看不同的數(shù)據(jù)類型:
df.head(), df.tail(3):查看frame的頭和尾:
df.index,df.columns,df.values: 顯示索引,列和底層的numpy數(shù)據(jù)
df.describe(): 快速統(tǒng)計(jì)
df.T :對(duì)數(shù)據(jù)轉(zhuǎn)置
df.sort_index(axis=1, ascending=False): 按軸排序
df.sort_values(by='B'): 按值排序
選擇數(shù)據(jù),推薦使用經(jīng)過優(yōu)化的pandas的數(shù)據(jù)訪問方式:.at,.iat,.loc和.ix
- 直接獲取
df['A']:返回單獨(dú)的一列,等同于df.A
df[0:3]: 前三行,第一行是索引
- 通過標(biāo)簽選擇
- 獲取一個(gè)交叉區(qū)域
df.loc[dates[0]]
- 在多軸上選擇
df.loc[:,['A','B']]
- 通過位置選擇
- 傳遞數(shù)值(行)df.iloc[3]
- 數(shù)值切片 df.iloc[3:5,0:2]
- 指定位置的列表 df.iloc[[1,2,4],[0,2]]
- 對(duì)行進(jìn)行切片 df.iloc[1:3,:]
- 對(duì)列進(jìn)行切片 df.iloc[:,1:3]
- 獲取特定的值 df.iloc[1,1] == df.iat[1,1]
- 布爾索引
- 一個(gè)單獨(dú)列來過濾 df[df.A > 0]
- where過濾:> df[df.A > 0]
- isin()過濾:
設(shè)置
- 加一個(gè)新的列:
s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))
df['F'] = s1
- 標(biāo)簽:df.at[dates[0],'A'] =0
- 位置:df.iat[0,1] = 0
- numpy數(shù)組:df.loc[:,'D'] = np.array([5] * len(df))
- where操作:
df2 = df.copy()
df2[df2 > 0] = -df2
缺失值處理
在pandas中,使用np.nan來代替缺失值,這些值將默認(rèn)不會(huì)包含在計(jì)算中。
- reindex()方法可以對(duì)指定軸上的索引進(jìn)行改變/增加/刪除操作,這將返回原始數(shù)據(jù)的一個(gè)拷貝:
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1
- 去掉包含缺失值的行:
df1.dropna(how='any')
- 對(duì)缺失值進(jìn)行填充:
df1.fillna(value=5)
- 對(duì)數(shù)據(jù)進(jìn)行布爾填充:
pd.isnull(df1)
應(yīng)用數(shù)據(jù)
- 應(yīng)用統(tǒng)計(jì)函數(shù): df.apply(lambda x: x.max() - x.min())
- 直方圖統(tǒng)計(jì): s.value_counts()
- Series對(duì)象在其str屬性中配備了一組字符串處理方法,可以很容易的應(yīng)用到數(shù)組中的每個(gè)元素: s.str.lower()
合并
Pandas提供了大量的方法能夠輕松的對(duì)Series,DataFrame和Panel對(duì)象進(jìn)行各種符合各種邏輯關(guān)系的合并操作。
- Concat :
pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)
- Join 類似于SQL類型的合并
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')
- Append 將一行連接到一個(gè)DataFrame上
df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.iloc[3]
df.append(s, ignore_index=True)
分組
對(duì)于”group by”操作,我們通常是指以下一個(gè)或多個(gè)操作步驟:
-(Splitting)按照一些規(guī)則將數(shù)據(jù)分為不同的組;
-(Applying)對(duì)于每組數(shù)據(jù)分別執(zhí)行一個(gè)函數(shù);
-(Combining)將結(jié)果組合到一個(gè)數(shù)據(jù)結(jié)構(gòu)中;
df.groupby('A').sum()
df.groupby(['A','B']).sum()
重塑
- stack()方法在DataFrame列的層次上壓縮
- 整合DataFrame或者Series(MultiIndex作為索引),stack()的逆運(yùn)算是unstack(),默認(rèn)情況下unStack上一次的情況。
- 透視表
pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])