Python學習筆記-Pandas學習手冊
04-21
Pandas手冊
為什麼需要PandasPandas(panel data & Data Analysis)是基於Numpy的專門用於數據分析的庫,處理大型的結構化表格數據尤其方便。pandas借鑒了R的數據結構,並支持numpy中定義的計算(比如矩陣運算),另外,底層用Cython和C做了很多速度上的優化。總之,Pandas是數據分析工作者使用Python時最常使用的庫。關鍵縮寫和包導入
在這個速查手冊中,我們使用如下縮寫:df:任意的Pandas DataFrame對象s:任意的Pandas Series對象同時我們需要做如下的引入:
import pandas as pdimport numpy as npfrom pandas import Series,DataFramePandas的數據結構及創建方法- Series包含一組數據(值,一維)以及與之相對應的一組數據標籤(索引,只能整體賦值),另外,它們都有一個name屬性
- Series(my_list,index)#從可迭代對象my_list(列表,ndarray,字典等)創建一個Series對象。以字典構建Series時索引可以自由地指定,結果會按索引排序
- DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型,可以看做是由Series組成的字典
- DataFrame(data,columns,index)#data最常見的形式由等長列表或數組組成的字典,columns即字典鍵值可自由指定,index長度必須同data長度相等;data為嵌套字典時,外層字典的鍵作為列,內層鍵則作為行索引;data為二維ndarray時,行標列標的長度都應嚴格對應
- df.head(n):查看DataFrame對象的前n行
- df.tail(n):查看DataFrame對象的最後n行
- df.shape():查看DataFrame的形狀
- http://df.info():查看索引、數據類型和內存信息
- df.describe():查看數值型列的匯總統計,標籤值
- df[col]:根據列名,並以Series的形式返回列,df[[col]]返回的是DataFrame格式
- df[[col1, col2]]:以DataFrame形式返回多列
- df[a:b]#如果ab是數值,默認是行切片,區間是[a,b),即普通的數值切片;如果ab是標籤值,則是[a,b],包含末端,需注意,標籤值的切片默認列優先,但標籤值列切片卻不能用[a:b]這種方法
- df.ix[:3,:2],df.ix[:3,[0,1,2]]#ix最方便,表示前3行前兩列,使用方法與ndarray完全相同,也可用標籤值來切片
- iloc方法#根據索引的整數位置選取行列,不會出現整數索引跟標籤索引混淆的情況
- DataFrame(df,columns=,index=)#這種方法得到的結果不能進行賦值操作
- df[列][行]=df.ix[[行],[列]]=df.ix[行][列]#這3中方法等價,生成相應的視圖,結果能賦值
數據存儲I/O
- pd.read_csv(path,sep,header,index_col,names,skiprows,na_values,nrows):從CSV文件導入數據,默認分隔符是逗號。sep一般是固定的分隔符或正則;header指用作列名的行號,默認0,可指定為其它數字或None;index_col指用作行索引的列名列編號(可以是一組);names指定列名的列表(一般結合header=None),na_values指要替換為Na的值,可以是列名對應的字典;nrows限定讀取的行數
- pd.read_table(filename):從限定分隔符的文本文件導入數據,默認分隔符為製表符,,主要參數同上
- pd.read_excel(filename):從Excel文件導入數據
- pd.read_sql(query, connect):從SQL表/庫導入數據,connect可以通過sqlite3,pymysql,pymssql三個庫的函數來定義
- pd.read_json(json_string)、json.loads():從JSON格式的字元串導入數據;
- pd.read_clipboard():從你的粘貼板獲取內容,並傳給read_table(),,在將網頁轉換為表格時很有用
- pd.DataFrame(dict):從字典對象導入數據,Key是列名,Value是數據
- df.to_csv(filename):導出數據到CSV文件,可以指定分隔符和保存的行列等
- df.to_excel(filename):導出數據到Excel文件
- df.to_sql(table_name, connection_object):導出數據到SQL表
- df.to_json(filename)、json.dumps():以Json格式導出數據到文本文件;
- csv.reader(open(filename))得到由行列表組成的可迭代對象;csv.writer(open(filename,wb)).writerrow(datarow)寫入數據
- df1+df2,df1.add(df2,fill_value=0)#行列索引是兩者的並集,沒有重疊的位置是NaN,,不指定缺失值填充的話,前後等價,,計算順序是先按照對應位置填充缺失值再計算,計算結果仍可能有缺失值哦
- df1-df2,df1.sub(df2)#重疊的部分相減,其它地方缺失
- df1*df2===df1.mul(df2) df1/df2===df1.div(df2)
- DataFrame與Series之間的運算遵循廣播原則,實際是DataFrame的每一列與Series相運算,即Series之間的運算。默認是在行上廣播(在軸1上匹配在軸0上廣播),在列上廣播需要指定df.sub(s,axis=0)
- np.func(df),df.apply(func)#兩種調用ufunc的方法,第二種方法還能調用自定義函數。比如,f=lambda x:x.max()-x.min();df.apply(f),默認是在軸0(行)上應用函數,一般意味著行的坍塌。df.apply(f,axis=1)指定在列上應用
- s.unique(),pd.value_counts(s)#Series的兩個函數,求唯一值數組和值計數
- df.describe():查看數據值列的匯總統計,如果是非數值則是另外一種統計方式
- df.sum(axis,skipna,level)#求和,默認在axis=0上計算,skipna指是否跳過缺失值,默認為True,全部Na的和是0
- df.max(),df.min()#求最大值最小值,參數同上。skipna=True時,全部Na的和是Na
- df.corr(method):返回列與列之間的相關係數(包含缺失值),method是相關係數的類型pearson(默認),kendall,spearman
- df.count(axis):返回指定軸上非空值的個數
- df.mean(axis,skipna,level),df.std(ddof):返回指定軸的均值和標準差,自由度ddof默認為1
- argmin,argmax#計算最小值和最大值的索引位置(整數)
- idxmin,idxmax#計算最小值和最大值的索引值
- df.cumsum(),df.cumprod()#樣本值的累計和和累計乘積,默認跳過缺失值,Na對應的累加值Na
- diff#計算一階差分(對時間序列很有用)
排序與排名
- df.sort_index(axis,ascending)#按索引排序,默認是在軸0上升序排列,ascending=False則降序
- s.sort_values#按值排序,相同值按索引序列排序(正序逆序有差別),缺失值永遠在最後面(按索引正序排列)
- df.sort_values(by=[a,b])#指在a列b列上排序,a主b副,,這樣的方法只能在axis=0上排序
- df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,後按col2降序排列數據
- df.rank(axis,ascending,method)#排名函數返回索引對應的名次,method有『average』默認在相等分組中,為各個值分配平均排名,『min』,『max』(使用整個分組的最小/最大排名)和『first』按值在原始數據中的出現順序分配排名
- df.dropna(axis,how)#丟棄缺失值,默認是去掉含有Nan的行,how=all指去不為Nan才丟棄
- fillna(value,method,axis,inplace,limit)#value是指填充的值,method有ffill,bfill等,inplace默認是False,指填充後返回新對象而源數據不變。還可用字典(每列賦值不同)給缺失值賦值
- s.astype(float):將Series中的數據類型更改為float類型
- obj.reindex(arr)#obj可以是Series或者DataFrame,arr既可以是index對象或其它序列型的Python數據結構,默認是更改index,也可以指定為更改columns。以上都可以通過Series和DataFrame重新生成的操作達到,但reindex函數還有一些缺失值處理參數。fill_value直接給缺失值賦值,method=ffill/bfill(向前填充或向後填充),limit指定最大填充量
- df.drop(arr,axis)#丟棄指定軸上的一個或多個項,默認axis=0,即行index。Series可同樣操作,,drop並不改變源數據,而del是直接操作源數據,且只能刪一列
- df.stack(),df.unstack()#構建和展開層次化索引,默認從最內層索引開始,可以傳入分層的名稱或編號來設置
- df.swaplevel(key1,key2)#調整索引的級別
- df.sortlevel()#由外到內排序,最外層的索引級別是0
- df.set_index(drop=True),reset_index()#將列轉換為行索引及其反功能函數,drop指該列是否在數據中刪除
- df.to_panel(),pl.to_frame()#DataFrame與Panel面板數據(3維ndarray)的相互轉化
- s.map(字典或函數)#創建一個元素級的映射,可以是字典也可以是函數
- data.replace()#替換元素,可以是單值,可以是數組,也可以是字典(相當於map函數),fillna可以看做特殊的replace
- df.rename(index,columns)#通過函數或字典來更改軸索引,橫軸縱軸都能改
- pd.cut(arr,bin)#數據離散化,返回一個特殊的Categorical對象,默認左開右閉。如果bin是數值,則根據arr的最小值和最大值計算等長面元;如果bin是數組,則直接根據數組裡的值創建區間
- pd.qcut(data,[0,0.1,0.5,0.8,1])#qcut類似cut,它按樣本大小劃定區間而不是考慮區間大小;如果傳入整數n,則得到樣本大小基本相等的n個面元區間
- pd.get_dummies(df[col], prefix)#將DataFrame中的某一列標籤化,prefix是轉換後列名的前綴
- df.drop_duplicates(col,keep)#移除重複行,默認按全部列判斷是否重複(不包括索引),也可以指定列名,,默認保留一組重複值里的第一個,可用keep參數設置為last
- df.groupby(col):返回一個按列col進行分組的Groupby對象,col還可以是一組列、一組等長數組或是字典,分組後默認分組鍵會變成索引(可以傳入參數as_index=False來),可以用axis指定分組的軸,默認是0;甚至可以用函數分組,比如df.groupby(len).sum()指按索引值的長度分組
- grouped.agg(func)#對分組進行運算,func是被引用的函數,可以是numpy里的函數或是自定義等,,可一次引入一組函數[func1,func2,func3],,可以傳入元組或字典給結果賦值,相當於SQL裡面的as,grouped.agg([(name1,func1),(name2,func2)])
- grouped.transform(func)#transform除了在分組上進行運算,結果的索引與源數據的索引相同(所以有時候需要廣播)
- data.apply(func)#apply是最一般化的分組函數調用方法,agg/tranfrom算是它的特殊使用,它是在各組上運行函數後,將結果用pd.concat組合在一起;其中可以一併傳入函數的其它參數
- df.pivot(col1,col2)#轉換透視表的快捷方式,相當於用set_index創建層次化索引,再用unstack重塑
- df.pivot_table(values=[col1,col2],rows=col3,cols=col4, aggfunc=max):創建一個數據透視表,行拖入col3,列拖入col4,計算col1和col2上的最大值,margins可以指定是否添加總計
- df1.join(df2,on=col1,how=inner):對df1的列和df2的列執行SQL形式的join,默認按索引合併,一次可連接多個DataFrame
- pd.merge(df1,df2,left_on,right_on,how,on)#默認以相同名稱的列合併,沒有相同值是使用left_on,right_on來指定,有多個相同名稱列是用on來指定,how默認是左連接,,還有left_index/right_index可以將索引用作連接鍵
- df.concat([df1, df2],axis=1,how,keys=[]):將df2中的列添加到df1的尾部,默認是在axis=0上工作的,默認是outer,,keys可以是列名或索引,,ignore_index=True會去掉舊索引生成新索引
jupyter notebook筆記,鏈接:http://pan.baidu.com/s/1qYFJGEK 密碼:3x57
參考文檔:
1、官方文檔:Python Data Analysis Library
2、《利用Python進行數據分析》老鼠書Pandas章節:Jupyter Notebook Viewer
3、笑虎老師的pandas速查手冊:Pandas速查手冊中文版 - 知乎專欄
推薦閱讀:
※給大家看點好玩的,用Python畫牛頓分形
※python模擬登陸的時候,別人用的是js生成的驗證碼(純字元)如何獲得生成的動態頁面?
※數據挖掘進階:kaggle競賽top代碼分享
※python 3.5 中 PEP0484 新加入的 Type Hints 的使用方法是什麼?
※Stackoverflow上百萬的Python問題|最火的十個