python---pandas詳解

python—pandas詳解


pandas介紹

pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。
pandas經常和其它⼯具⼀同使⽤,如數值計算⼯具NumPy和SciPy,分析庫statsmodels和scikitlearn和數據可視化庫matplotlib

pandas的數據結構介紹

pandas兩大主要數據結構:Series和DateFrame

Series

Series是⼀種類似於⼀維數組的對象,它由⼀組數據(各種NumPy數據類型)以及⼀組與之相關的數據標籤(即索引)組成。僅由⼀組數據即可產⽣最簡單的Series:
例如:
在這裏插入圖片描述
Series的字符串表現形式爲:索引在左邊,值在右邊,如果未指定索引,就會自動生成。也可以自己指定索引:
例如:
在這裏插入圖片描述
當創建好pandas數組後,可以通過values和index屬性獲取數組的值和索引。
例如:
在這裏插入圖片描述
與numpy數組不同的是,pandas數組可以通過索引的方式選取Series中的單個或一組值:
例如:
在這裏插入圖片描述
當對pandas數組進行一些數學運算或者邏輯運算時,它返回的都是帶索引的。
例如:
在這裏插入圖片描述
另外,你可以通過python字典來創建一個Series
例如:
在這裏插入圖片描述另外:Series對象本身及其索引都有⼀個name屬性
例如:
在這裏插入圖片描述

DataFrame

DataFrame是⼀個表格型的數據結構,它含有⼀組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。DataFrame既有⾏索引也有列索引,它可以被看做由Series組成的字典(共⽤同⼀個索引)。

建DataFrame的辦法有很多,最常⽤的⼀種是直接傳⼊⼀個由等⻓列表或NumPy數組組成的字典:
在這裏插入圖片描述
如果指定了了列序列,則DataFrame的列就會按照指定順序進行排序:
例如上面的例子, 這裏指定第一列爲’year’,第二列爲‘state’,第三列爲’pop’.
在這裏插入圖片描述
另外,還可以通過嵌套字典的方式創建DataFrame,如果嵌套字典傳給DataFrame,pandas就會被解釋爲:外層字典的鍵作爲列,內層鍵則作爲⾏索引:
例如:
在這裏插入圖片描述

對於特別大的DataFrame,head方法會選取前五行:
例如:
在這裏插入圖片描述
如果傳入的列在數據中找不到,就會在結果中產生缺失值:
在這裏插入圖片描述
通過類似字典標記的⽅式或屬性的⽅式,可以將DataFrame的列獲取爲⼀個Series:
例如:
在這裏插入圖片描述
列可以通過賦值的⽅式進⾏修改。
例如:
在這裏插入圖片描述
將列表或數組賦值給某個列時,其⻓度必須跟DataFrame的⻓度相匹配。如果賦值的是⼀個Series,就會精確匹配DataFrame的索引,所有的空位都將被填上缺失值:
例如,這裏把原本aaa列都是NaN類型的數據,通過Series數組改變了相應的索引數據:在這裏插入圖片描述
DataFrame的del⽅法可以⽤來刪除相應的列:
例如,這裏通過del方法把pop列刪除了:
在這裏插入圖片描述
另外,可以通過Numpy的數組方法, 對DataFrame進行轉置(arr.T):

在這裏插入圖片描述
關於DataFrame構造器

類型 說明
二維ndarray 數據矩陣,還可以傳入行標和列標
由數組、列表或元組組成的字典 每個序列會變成DataFrame的一列。所有序列的長度必須相同
NumPy的結構化/記錄數組 類似於“由數組組成的字典”
由Series組成的字典 每個Series會成爲一列。如果沒有顯式指定索引,則各Series的索引會被合併成結果的行索引
由字典組成的字典 各內層字典會成爲一列。鍵會被合併成結果的行索引,跟“由Series組成的字典”的情況一樣
字典或Series的列表 各項將會成爲DataFrame的一行。字典鍵或Series素引的並集將會成爲DataFrame的列標
由列表或元組組成的列表 類似於“二維ndarray”
另一個DataFrame 該DataFrame的索引將會被沿用,除非顯式指定了其他索引
NumPy的MaskedArray 類似於“二維ndarray”的情況,只是掩碼值在結果DataFrame會變成NA/缺失值

索引對象

構建Series或DataFrame時,所
⽤到的任何數組或其他序列的標籤都會被轉換成⼀個Index,而且index對象不可變,用戶不能對它修改
(會拋出typeError的異常):
在這裏插入圖片描述

基本功能

重新索引

pandas對象的⼀個重要⽅法是reindex,其作⽤是創建⼀個新對象,它的數據符合新的索引。
例如:
在這裏插入圖片描述

丟棄指定軸上的項

使用drop方法可以返回一個指定軸上刪除了指定值的新對象:
例如(對於Series):
在這裏插入圖片描述
對於DataFrame,可以刪除任意軸上的索引值。通過傳遞參數axis可以刪除列的值:

例如:frame是什麼都沒有刪除的,frame1刪除了第0行,frame2通過axis=1指定了列,刪除了state列
在這裏插入圖片描述

索引、選取和過濾

Series索引(obj[…])的⼯作⽅式類似於NumPy數組的索引,只不過Series的索引值不只是整數。

對於未指定索引的數組,會用默認的數字(0~N-1)索引, 例:
在這裏插入圖片描述

通過index屬性指定索引:
在這裏插入圖片描述
切片操作:
這裏演示了先用數字索引,再用標籤索引
在這裏插入圖片描述

⽤loc和iloc進⾏選取

特殊的標籤運算符loc和iloc。它們可以讓你⽤類似NumPy的標記,使⽤軸標籤(loc)或整數索引(iloc),從DataFrame選擇⾏和列的⼦集。
例如(使用loc):
在這裏插入圖片描述
使用iloc(整數索引)
在這裏插入圖片描述

算術運算和數據對齊

pandas最重要的⼀個功能是,它可以對不同索引的對象進⾏算術運算。在將對象相加時,如果存在不同的索引對,則結果的索引就是該索引對的並集例如:
在這裏插入圖片描述
對於DataFrame,對齊操作會同時發生在行和列上:
在這裏插入圖片描述

DataFrame和Series之間的運算

跟不同維度的NumPy數組⼀樣,DataFrame和Series之間算術運算也是有明確規定的,
例如,當我們frame減去series時,對應frame每一行都會執行這個操作:(其實這叫做廣播)
在這裏插入圖片描述
默認情況下,DataFrame和Series之間的算術運算會將Series的索引匹配到DataFrame的列,然後沿着⾏⼀直向下⼴播。

函數應⽤和映射

NumPy的ufuncs(元素級數組⽅法)也可⽤於操作pandas對象:
例如:
在這裏插入圖片描述
另⼀個常⻅的操作是,將函數應⽤到由各列或⾏所形成的⼀維數組上。DataFrame的apply⽅法即可實現此功能:
在這裏插入圖片描述
或者使用applymap進行每個元素操作:
這裏對每一個元素加一
在這裏插入圖片描述

排序和排名

根據條件對數據集排序(sorting)也是⼀種重要的內置運算。要對⾏或列索引進⾏排序(按字典順序),可使⽤sort_index⽅法,它將返回⼀個已排序的新對象。

對於Series數組:
在這裏插入圖片描述
對於DataFrame,則可以根據任意一個軸上的索引進行排序:
在這裏插入圖片描述
通過ascending屬性可以使其降序:
在這裏插入圖片描述

帶有重複標籤的軸索引

如果有重複的索引,那麼索引的is_unique屬性可以告訴你它的值是否是唯⼀的
在這裏插入圖片描述
在這裏插入圖片描述

彙總和計算描述統計

pandas對象擁有⼀組常⽤的數學和統計⽅法。它們⼤部分都屬於約簡和彙總統計,⽤於從Series中提取單個值(如sum或mean)或從DataFrame的⾏或列中提取⼀個Series。跟對應的NumPy數組⽅法相⽐,它們都是基於沒有缺失數據的假設⽽構建的。

例如(sum方法):
在這裏插入圖片描述
mean方法:
在這裏插入圖片描述
idxmin獲取最大值的索引(idxmin獲取最小值索引):
在這裏插入圖片描述

方法 說明
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 計算百分數變化

參考書籍:《利用python進行數據分析》

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