pandas筆記(一)——入門
本文用的開發環境是:
- python 2.7.8
- pandas 0.22.0
- jupyter notebook 5.2.2
一、pandas數據結構
1、Series。這是一種類似於一維數組的對象,由一組數據(各種numpy數據類型)以及一組與之相關的數據標籤(即索引)組成。在創建時可以顯式說明各個數據點的索引,如果沒有說明,則默認自動創建0到N-1(N為數據的長度)的整數型索引,並且可以通過索引的方式選取Series中的單個或一組值。也可以通過字典賦值創建。Series在算術運算中會自動對齊不同索引的數據。
2、創建DataFrame。這是一個表格型的數據結構。構建DataFrame最常用的一種是直接傳入一個由等長列表或numpy數組組成的字典。可通過columns指定列順序,如果指定的列名稱不存在,則默認為NaN值。
3、獲取DataFrame數據。可通過字典標記的方式或屬性的方式,將DataFrame的列獲取為一個Series。也可以通過位置或名稱的方式獲取行數據,比如用索引欄位loc或ix。同樣,也可以通過獲取行和列數據的方式對數據進行賦值修改,比如用Series給某個行或列賦值。如果需要賦值修改的行或列,則會自動創建。
4、刪除行和列。用del關鍵字可刪除列,drop()函數可刪除行。drop()函數的inplace參數值為「True」則會修改源DataFrame數據,為「False」則產生一個副本,不會修改源數據。
5、DataFrame的行和列都有name屬性,可設置行和列的name值。
二、基本功能
6、reindex重新索引。創建一個適應新索引的新對象,調用該Series的reindex將會根據新索引進行重排。如果某個索引值不存在,則為NaN,可用「fill_value」參數設置缺失的默認值。
7、對於時間序列這樣的有序數據,重新索引時可能需要做一些插值處理。method選項即可達到此目的,例如使用ffill可以實現前向值填充。
其他reindex的method選項:
- ffill或pad:前向填充(或搬運)值;
- bfill或backfill:後向填充(或搬運)值;
8、對於DataFrame,reindex可以修改(行)索引、列,或兩個都修改。
9、可用標籤進行切片運算,這與普通的python切片運算不同,其末端是包含的。除了用於選取,還可以直接用此方式對源數據進行修改。
10、對DataFrame進行標籤索引,可用索引欄位ix。
11、算術運算和數據對齊。pandas最重要的一個功能是,它可以對不同索引的對象進行算術運算。在將對象相加時,如果存在不同的索引對,則結果的索引就是該索引對的並集。對於DataFrame,則行和列必須同時對應。
12、在算術方法中填充值。當算術運算出現沒有重疊的索引時,默認為NaN值,可用add方法,並傳入「fill_value」參數填充一個特殊值。
其他算術方法:
- add:用於加法(+);
- sub:用於減法(-);
- div:用於除法(/);
- mul:用於乘法(*)。
13、DataFrame和Series之間的運算。默認情況下,DataFrame和Series之間的算術運算會將Series的索引匹配到DataFrame的列,然後沿著行一直向下廣播。
14、接第13條,如果希望匹配行且在列上廣播,則必須使用算術運算方法。
15、函數應用和映射。numpy的ufuncs(元素級數組方法)也可以用於操作pandas對象。
16、接第15條。另一個常見的操作是,將函數應用到由各列或行所形成的一維數組上,可用DataFrame的apply方法實現。
註:關於axis軸,默認為axis=0沿著行廣播,垂直向下;axis=1沿著列廣播,水平延伸。
17、接第16條。除標量值外,傳遞給apply的函數還可以返回由多個值組成的Series:
18、排序和排名。可用sort_index()方法,對行或列索引進行排序,它將返回一個已排序的新對象。數據默認按升序排序,如果需要按降序排序則可將ascending參數值修改為False。
19、在DataFrame排序中,有時需要根據一個或多個列中的值進行排序,可將一個或多個列名傳遞給sort_values()的by選項。
20、帶有重複值的軸索引。如果某個索引對應多個值,則返回一個Series,對應單個值的,返回一個標量值。
三、匯總和計算描述統計
21、pandas對象擁有一組常用的數學和統計方法。它們大部分都屬於約簡和匯總統計,用於從Series中提取單個值(如sum或mean)或從DataFrame的行或列中提取一個Series。跟對應的numpy數組方法對比,它們都是基於沒有缺失數據的假設而構建的。會默認把缺失值NaN當做0計算。如果想排除帶有NaN的行或列,可通過skipna選項禁用。
22、describe()可以產生多個匯總統計,而對於非數值型數據,describe()則會產生另外一種匯總統計。
其他描述和匯總統計方法:
- count:非NA值的數量;
- describe:針對Series或各DataFrame列計算匯總統計;
- min、max:最大值、最小值;
- argmin、argmax:計算能夠獲取到最小值和最大值的索引位置(整數);
- idxmin、idxmax:計算能夠獲取到最小值和最大值的索引值;
- quantile:計算樣本的分位數(0到1);
- sum:求和;
- mean:求平均值;
- median:求算術中位數(50%分位數);
- mad:根據平均值計算平均絕對離差;
- var:樣本值的方差;
- std:樣本值的標準差;
- skew:樣本值的偏度(三階矩);
- Kurt:樣本值的峰度(四階矩);
- cumsum:樣本值的累積和;
- cummin、cummax:樣本值的累計最大值和累計最小值;
- cumprod:樣本值的累計積;
- diff:計算一階差分(對時間序列很有用);
- pct_change:計算百分數變化。
23、唯一值、值計數。unique()可以得到Series中的唯一值數組。value_counts()函數用於計算一個Series中各值出現的頻率。
24、成員資格。isin()函數用於判斷矢量化集合的成員資格,可用於選取Series或DataFrame列中數據的子集。
四、處理缺失數據
25、pandas使用NaN表示數組中的缺失數據,python內置的None值也會被當做NA處理。
NA處理方法:
- dropna:根據各標籤的值中是否存在缺失數據對軸標籤進行過濾,可通過閾值調節對缺失值的容忍度;
- fillna:用指定值或插值方法(ffill或bfill)填充缺失數據;
- isnull:返回一個含有bool值的對象,這些bool值表示哪些值是缺失值NA,該對象的類型與源類型一樣;
- notnull:isnull的否定式。
26、濾除缺失數據。對於Series,dropna()將會返回一個僅含非空數據和索引值的Series。
27、接第26條。對於DataFrame對象,dropna()默認丟棄任何含有缺失值的行。傳入how=all將只丟棄全為NA的那些行。傳入axis=1將丟棄列。
28、填充缺失數據。可以通過fillna()函數填充缺失值。fillna默認會返回新對象,但通過inplace=True參數可以實現對源數據進行修改。
fillna函數參數:
- value:用於填充缺失值的標量值或字典對象;
- method:插值方式,如果函數調用時未指定其他參數,則默認為「ffill」;
- axis:待填充的軸,默認axis=0;
- inplace:修改調用者對象,而不是產生副本;
- limit:(對於前向和後向填充)可以連續填充的最大數量。
五、層次化索引
29、層次化索引能使你在一個軸上擁有多個(兩個以上)索引級別。
30、接第29條。層次化索引在數據重塑和基於分組的操作(如透視表生成)中扮演著重要的角色。比如可以將多層索引的Series通過unstack()方法重新安排到一個DataFrame中。
31、對於DataFrame,每條軸都可以有分層索引。
本文筆記為《利用python進行數據分析》一書整理而得。
溫馨提示:
由於pandas是基於numpy構建的,所以學習pandas前最好先了解numpy的基礎。
附:
陳小挺:numpy筆記(一)——基礎用法文章首發於知乎,禁止轉載。
推薦閱讀:
※[數據分析與可視化 11] 特徵值和特徵向量的幾何直觀
※想要做好社團招新?——會利用數據就好啦
※數據分析和財務分析之間有哪些可以相互借鑒的地方?
※民生銀行十五年的數據體系建設,深入解讀阿拉丁大數據生態圈、人人BI 是如何養成的?
※通俗解讀《8步成為數據科學家》