pandas 學習筆記一

筆記來源:利用python進行數據分析【Wes Mckinnney著,唐學韜等譯】

 

一、pandas的數據結構介紹【主要包括Series、DataFrame】

介紹:pandas名稱爲panel data(面板數據),其基於NumPy構建的

1、Series

(1)簡單構建

Series是一種類似於一維數組的對象,有一組數據(可爲NumPy數據類型)及一組與之相關的數據標籤(索引)組成,若只有一組數據,則產生的是最簡單的Series

(2)獲取值及索引屬性【.values    .index】

由上述可知,Series的表現形式爲,索引在左邊,值在右邊。因爲上述沒有爲數據進行指定索引,其則會自動創建0-N-1(N爲數據長度)的整數型索引,可使用values、index屬性分別獲取Series的表達形式和索引對象。

(3)傳入自己定義的索引並取相應位置的值

創建含有自己定義的索引數據,創建內部傳入第二個參數,該參數爲index,其賦爲一個列表形式,若取其中的一個值,一層列表傳入鍵即可,如果取多個值,則兩層列表傳入多個鍵。

(4)Series 相關計算

(5)字典形式構建Series【鍵爲索引,值爲Series值】

(6)傳入字典,默認字典的鍵作爲索引,但也可重新定義索引。如下使用指定列表,傳入的列表索引如果在原字典索引中有,則返回的值即爲原索引對應的值,如果新索引在原索引中沒有,則返回結果爲NaN

【sdata中與states索引相匹配的那3個值會被找出了放到相應的位置上,但是由於‘California’所對應的sdata值找不到,返回結果爲NaN,代表確實數據】

(7)檢查是否爲缺失數據(  pd.isnull()   pd.notnull()  ), 返回與原來相同長度的布爾型結果

(8)算術運算,自動對齊不同索引數據

(9)Series對象的name屬性與索引的name屬性【也可對索引name】

(10)Series索引直接通過賦值進行修改

2、DataFrame

DataFrame是一個表格型的數據結構,含有有序的列,每列可是不同的值類型(如:數值、字符串、布爾值等)。其既有行索引、也有列索引。可以理解爲有Series組成的字典(共同使用一個索引

(1)創建方法

 1)傳入字典,字典內再傳入列表【字典的鍵:DataFrame的列名、字典的值(列表元素):DataFrame的值】

常用的方法是直接傳入一個由等長列表或NumPy數組組成的字典。並且行索引會自動加上(從0開始).可以對列索引按照指定順序進行排序【columns關鍵字傳入】

如果原來傳入的數據已經有了列索引,我們再給其傳入列索引,那麼結果將和Series類似。即先在傳入的數據中,有則返回原來數據對應的值,無則返回NaN值。如下【原列索引含有‘year’,‘state’,‘pop’,則這三個返回原來對應的值,但是‘debt’新增的列索引名在原來數據中沒有,則返回值爲NaN】

2)字典的嵌套(字典的字典)【最外層字典的鍵:DataFrame的列名、第二次字典的鍵:DataFrame的每行索引。第二層字典的值:DataFrame的值】

顯示傳入指定索引

其中新傳入的索引沒有對應值,則返回NaN 

(2)獲取指定位置的數據或對指定位置數據進行賦指定值

1)只獲取指定列數據

直接通過DataFrame列表傳入列名的形式或者.列名的方式獲取。將得到一個Series數據(返回含有行索引)

2)三種獲取指定位置數據的方式區別(.ix   .loc   .iloc)

loc【索引名稱】:內部傳入參數以列表形式傳入(內容是索引名稱,不能爲索引號【除非索引名稱即爲索引號】

如果loc的索引名稱即爲索引號(爲數字時),還可以進行切片操作【但這裏的切片包含第一個與最後一個![含尾索引]

iloc【索引號】:內部傳入參數以列表形式傳入(內容是索引號,不能爲索引名稱)不管行列均用索引號【切片不含尾索引

ix【索引名稱與索引號均可用】:是loc、iloc的結合體.可以混合使用索引名稱與索引號

提示:ix使用提示其將被棄用。以後將使用以上兩者(loc——通過行標籤索引行數據 
iloc——通過行號索引行數據。)進行替代

3) 對指定列進行賦值,可以爲標量值,也可以爲一組值【這組值必須與行數相匹配】

4)對指定列進行賦值,賦值爲一個Series【如果精確匹配DataFrame的索引,則所有位置即被填充,否則爲NaN】

5)對之前爲出現的列進行賦值則會創建一個新的列,關鍵字del用於刪除列【如下''eastern"之前未出現過,則會新創建】

(3)DataFrame的index和columns的name屬性【index.name、columns.name、.values】

3、索引對象

pandas的索引對象負責管理軸標籤和其他元數據(如軸名稱等),構建Series或DataFrame時,所用到的任何數組或其他序列的標籤都會被轉換爲一個Index

謹記:Index對象是不可修改的,從而保證了其在多個數據結構件安全共享

每個索引均有一些方法和屬性。如下列出了Index的一些方法和屬性

方法 說明
append 連接另一個Index對象,產生一個新的Index
diff 計算差集,得到一個Index
intersection 計算交集
union 計算並集
isin 計算一個指示各值是否都包含在參數集合中的布爾值數組
delete 刪除索引i處的元素,並得到新的Index
drop 刪除傳入的值,並得到新的Index
insert 將元素插入到索引i處,並得到新的Index
is_monotonic 當元素均大於等於前一個元素時,即順序遞增或不變,返回True
is_unique 是否爲唯一值,當Index沒有重複值時,返回True
unique 計算Index中唯一值的數組

二、基本功能(p126)

1、重新索引【reindex()】

pandas對象的一個重要方法就是reindex.其主要用於創建一個適應新索引的新對象。

(1)單純的重新索引【新索引代替原索引,如果原來無該索引,則新創建的索引默認對應值爲NaN(表示缺失值)】

(2) 重新索引後,對新增的索引進行缺失值填充

1) 固定賦值填充

2)前向填充(新索引(新增)對應的值根據前一個索引(原存在)進行填充(與前一個索引相同的值),使用傳入method=‘ffill’或‘pad’)

3)後向填充(意思讓新索引(新增)對應的值根據後一個索引(原存在)進行填充(與後一個索引相同的值),使用傳入method=‘bfill’或‘backfill’)

(3) DataFrame的重新索引(可修改行、列索引)

1)當僅傳入一個序列時,重新索引行

2) 傳入列重新索引列【原有則取原值,原無則爲NaN值】

2、丟棄指定軸上的項(drop()方法)

(1)Series()相關

.drop()方法後有返回值,返回的即爲丟棄後的內容,不改變drop()之前的內容

(2)DataFrame相關

其可刪除任意軸上的索引值。【丟棄指定列,axis=1

3、索引、選取、過濾

(1)Series索引相關【與NumPy數組索引類似,但Series索引不僅限整數】

1)取指定值

2) 使用標籤進行切片【與python切片不同,這裏標籤切片含末端元素】

(2)DataFrame相關

1) 普通索引或索引標籤取指定位置值【與上述Series類似】

2) 使用ix取指定位置的值



3)DataFrame的索引選項

類型 說明
obj[val]  選DataFrame的單個列或一組列。如在布爾型數組(過濾行)、切片(行切片)、布爾型DataFrame時求解便利
obj.ix[val] 選取DataFrame的單個行或一組行
obj.ix[:,val] 選取單個列或列子集
obj.ix[val1,val2] 同時選取行、列
reindex方法 將一個或多個軸匹配到新索引
xs方法 根據標籤選取單行或單列,並返回一個Series
icol、irow方法 根據整數位置選取單列或單行,並返回一個Series
get_value、set_value方法 根據行標籤和列標籤選取單個值

4、算術運算和數據對齊

pandas最重要的功能,可對不同索引的對象進行算術運算。對象相加時,存在不同索引,則結果爲索引對的並集

(1)簡單的算術計算

1)Series

2) DataFrame

(2) 在算術方法中填充值

1) add()

2)reindex()重新索引,指定填充值

(3)DataFrame和Series之間的運算

1) 簡單NumPy數組廣播計算示例

2)DataFrame與Series之間的廣播計算也類似,如下示

3)兩者進行相加計算,索引進行求並集,但是非共同索引值爲NaN,共同索引值纔有值

4) 兩者進行相減時,按某個軸進行操作

5、函數應用和映射

NumPy的unfunc(元素級數組方法)也可以操作pandas對象

(1)np.abs()【求絕對值】

(2) .apply()的使用【將函數應用到各列或行形成一維數組】

(3)applymap() 的使用 

而Series對應的應用元素級函數爲map方法

6、排序和排名

(1)按索引排序【sort_index()函數,可傳入軸向axis、順序逆序值ascending】

(2) 按數值進行排序【python2用order方法、python3用sort_values方法】

1)Series按值排序

2) DataFrame按值排序

(3)排名rank方法【會增設一個排名值,從1開始,與numpy.argsort類似】

1).rank()有返回值,不影響原來的數據。返回的值是值的排名,如有多個值,求平均排名【默認method = ‘average’】。

2)當傳入參數時method =‘first’時,不求平均排名【按原始數據中的出現順序分配排名,出現越前,排名越靠前】

3) 降序排名,則傳入參數ascending = False【即值最大排名序號越小,即最大值排名爲1】

4) 排名時用於破壞平級關係的method選項

method 說明
"average" 默認:在相等的分組中,爲各個值分配平均排名
"min" 使用分組中的最小排名【可能有重複排名】
"max" 使用整個分組中的最大排名【可能有重複排名】
"first" 按值在原始數據中的出現順序分配排名

7、帶有重複值的索引

(1)索引是否爲唯一值(is_unique())

(2)按索引取值

(3)DataFrame進行行索引取值

 

參考:

[1]. McKinney,W.著;唐學韜等譯. 利用python進行數據分析[M]. 北京:機械工業出版社,2013.9.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章