從零開始學Python【四】--pandas(序列部分)


從零開始學Python【四】--pandas(序列部分)

大珂珂

上一期我們介紹了數據分析中常用的numpy模塊,從數組的創建、元素的獲取、數學+統計函數、隨機數的生成、到外部文件的讀取。這期我們再來介紹另一個重磅的數據分析常用模塊--pandas。該模塊更像是R語言中的向量、數據框的處理,接下來我們就一一介紹裡面的小知識點。

序列

序列(Series)可以理解成是R語言中的向量,Python中的列表、元組的高級版本。為什麼說是高級版本呢?因為序列與上期介紹的一維數組類似,具有更好的廣播效應,既可以與一個標量進行運算,又可以進行元素級函數的計算。如下例子所示:

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

列表與常數10相加,報錯,顯示無法將列表與整形值連接,“+”運算在列表中是連接操作。

從零開始學Python【四】--pandas(序列部分)

將上面的列表轉換成一個序列後,就可以正常的完成運算,這就是序列的廣播能力。同樣,列表也不能用於元素級的數學函數,對比如下:

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

除了上面介紹序列功能,再來說說其他序列常用的場景,如序列的索引、成員關係、排重、排序、計數、抽樣、統計運算等。

序列的索引:

由於序列是列表的擴張版,故序列也有一套類似於列表的索引方法,具體如下:

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

倒數的方式取元素,序列就顯得不是很方便了,我們推薦使用非常棒的iat方法,該方法不管應用於序列還是數據框都非常優秀,主要體現在簡介而高速。然而,實際工作中很少通過位置索引(下標)的方法獲取到序列中的某些元素,例如1000個元素構造的序列,查出屬於某個範圍值總不能一個個去數吧?序列提供了另一種索引的方法--布爾索引。具體用法如下:

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

我們知道,在R語言中一個向量的元素是否包含於另一個向量,可以使用%in%函數進行判斷,同理,Python中也有類似的方法。對於一個一維數組,in1d函數實現該功能;對於一個序列,isin方法可實現該功能。

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

numpy模塊中的in1d函數也可以用於序列的成員關係的比較。


如果手中有一離散變量的序列,想查看該序列都有哪些水平,以及各個水平的頻次,該如何操作?

從零開始學Python【四】--pandas(序列部分)

沒錯,只要藉助於unique函數(與R語言一樣的函數)實現序列的排重,獲得不同的水平值;通過使用value_counts函數(對應於R語言的table函數)對各個水平進行計數,並按頻次降序呈現。


有的時候需要對某個序列進行升序或降序排序,雖然這樣的場景並不多,但排序在數據框中的應用還是非常常用的,先來看看如何對序列進行排序:

從零開始學Python【四】--pandas(序列部分)

s.sample(n=None, frac=None, replace=False, weights=None, random_state=None,axis=None)

n:指定抽取的樣本量;

frac:指定抽取的樣本比例;

replace:是否有放回抽樣,默認無放回;

weights:

指定樣本抽中的概率,默認等概論抽樣;

random_state:指定抽樣的隨機種子;

從零開始學Python【四】--pandas(序列部分)

抽樣也是數據分析中常用的方法,通過從總體中抽取出一定量的樣本來推斷總體水平;或者通過抽樣將數據拆分成兩部分,一部分建模,一部分測試。pandas模塊提供了sample函數(與R語言的sample函數一致)幫我們完成抽樣的任務。

從零開始學Python【四】--pandas(序列部分)


從零開始學Python【四】--pandas(序列部分)

由於總體就是男、女性別兩個值,故需要抽出10個樣本,必須有放回的抽,而且男女被抽中的概率還不一致,女被抽中的概率是0.8。


統計運算

pandas模塊提供了比numpy模塊更豐富的統計運算函數,而且還提供了類似於R語言中的summary彙總函數,即describe函數

從零開始學Python【四】--pandas(序列部分)

從零開始學Python【四】--pandas(序列部分)

其中count是序列中非缺失元素的個數。哦,對了,如何判斷一個序列元素是否為缺失呢?可以使用isnull函數,等同於R語言中的is.na函數。

除此,我們再來羅列一些常用的統計函數:

s.min() # 最小值

s.quantile(q=[0,0.25,0.5,0.75,1]) # 分位數函數

s.median() # 中位數

s.mode() # 眾數

s.mean() # 平均值

s.mad() # 平均絕對誤差

s.max # 最大值

s.sum() # 和

s.std() # 標準差s.kurtosis() # 峰度

s.cumsum() # 和的累計,返回序列

s.cumprod() # 乘積的累積,返回序列

s.product() # 序列元素乘積

s.diff() # 序列差異(微分),返回序列

s.abs() # 絕對值,返回序列

s.pct_change() # 百分比變化 ,返回序列s.corr(s2) # 相關係數

s.ptp() # 極差 R中的range函數


今天我們的內容就介紹到這邊,歡迎大家拍磚。下期我們來聊聊pandas模塊的數據框


分享到:


相關文章: