Python點滴(八)—pandas中的透視表

 

首先導入需要使用的numpy和pandas功能庫,numpy用於數值計算,Pandas是基於numpy構建的用於科學計算的功能庫,pandas.pivot_table是Pandas庫(pd)中的函數。然後讀取Lending Club數據 ,並生成名爲lc的數據表。

1

2

3

import pandas as pd

import numpy as np

lc=pd.DataFrame(pd.read_csv('LoanStats3a.csv',header=1))

創建簡單的數據透視表

我們選擇Lending Club數據表中的貸款期限和貸款總額字段來創建一個簡單的數據透視表。按貸款期限維度對貸款總額進行聚合,將貸款期限字段(term)放在行索引lndex中,貸款總額字段 (loan_amnt)放在值values中,生成按不同貸款期限維度聚合的貸款總額數據。這裏需要說明的是在默認情況下pandas.pivot_table對指標的彙總方式是計算平均值。 因此下面的表中顯示的是不 同貸款期限的貸款平均值數據。這個簡單的數據透視表只有一個維度和一個指標。下面我們將爲這個數據透視表增加更多的維度和指標,並增加更多的指標彙總計算方式。

1

pd.pivot_table(lc,index=["term"],values=["loan_amnt"])

 

增加一個行維度(index)

在貸款期限的維度上增加貸款用戶等級維度,創建一個雙維度的數據透視表,在pandas.pivot_table的行索引index中增加貸款用戶等級字段(grade)。這樣在行索引維度index中共包含了兩個維 度,主維度貸款期限(term)和次級維度貸款用戶等級(grade)。指標是按不同貸款期限下貸款用戶等級分佈進行彙總貸款金額平均值。與之前相比指標數據經過次級維度的細分變的更加精細。

1

pd.pivot_table(lc,index=["term","grade"],values=["loan_amnt"])


通過調整pandas.pivot_table函數中不同維度的位置可以更改數據透視表中維度的層級,以及數據的顯示方式。這裏我們將前面代碼行索引中兩個字段位置互換,此時貸款用戶等級(grade)成了主維度,貸款期限(term)變成了次級維度。

1

pd.pivot_table(lc,index=["grade","term"],values=["loan_amnt"])


增加一個值變量(value)

除了增加次級維度以外,還可以增加需要彙總的數據值。在前面數據透視表的基礎上我們增加總利息字段作爲第二個彙總值。方法與前面增加次級維度很相似,將需要增加的字段放在值values中即可。下面是具體的代碼和生成的數據透視表,其中total_rec_int是新增的值values變量。這裏需要再次說明的是,默認情況下pandas.pivot_table按平均值對數據進行彙總。

1

pd.pivot_table(lc,index=["grade","term"],values=["loan_amnt","total_rec_int"])


更改數值彙總方式

若要更改pandas.pivot_table對值values的彙總方式需要在代碼中進行設置,下面將貸款總額和總利息字段的彙總方式改爲求和。方法是在代碼中加入aggfunc=np.sum。新生成的數據透視表中值字段的計算方式就由之前的平均值改爲了求和值。

1

pd.pivot_table(lc,index=["grade","term"],values["loan_amnt","total_rec_int"],aggfunc=np.sum)


增加數值彙總方式

除了可以對值變量values計算平均值和求和以外,還可以進行計數。下面我們在上面數據透視表的基礎上分別對貸款總額和總利息字段進行求和,平均值和技術的計算。具體方法是代碼中增加以下內容aggfunc=[np.sum,np.mean,len]),aggfunc是彙總方式,np.sum表示求和,np.mean表示計算平均值,len表示計數。在下面新創建的數據透視表中可以看到,求和sum部分,平均值mean部
分和計數len部分的計算結果。

1

pd.pivot_table(lc,index=["grade","term"],values=["loan_amnt","total_rec_int"],aggfunc=[np.sum,np.mean,len])


如果數據表中包含有NaN值,並且在之前的清洗中沒有進行處理,也可以在生成數據透視表的過程中進行處理或替換。在pandas.pivot_table函數中有兩種處理NaN值的方式,第一種是將NaN值替換爲0。第二種爲放棄NaN值,也就是說包含有NaN值的數據條目不參加計算。這裏我們使用第一種方法,將NaN值替換爲0。具體方法是在代碼中添加以下部分fill_value=0。

1

pd.pivot_table(lc,index=["grade","term"],values=["loan_amnt","total_rec_int"],aggfunc=[np.sum,np.mean,len],fill_value=0)

 

增加一個列維度(columns)

pandas.pivot_table函數也支持列維度。在Excel中需要將對應的字段拖到列區域中,在Pandas中的方法是增加列columns,並將對應的字段名稱放在列columns變量的值中。下面是具體的代碼,其中columns=[“home_ownership”]是新增加的部分,表示在數據表中增加列維度home_ownership。

1

pd.pivot_table(lc,index=["grade"],values=["loan_amnt"],columns=["home_ownership"],aggfunc=[np.sum],fill_value=0)

 

增加多個列維度

與行索引一樣,列columns中也可以增加多個維度,方法與增加行維度和值一樣,這裏不再贅述。下面是具體的代碼,其中columns=[“home_ownership”,”term”]是發生變化的部分,表示列中新增了貸款期限term維度。home_owership爲主維度,term爲次級維度。

1

pd.pivot_table(lc,index=["grade"],values=["loan_amnt"],columns=["home_ownership","term"],aggfunc=[np.sum],fill_value=0)

 

增加數據彙總值

pandas.pivot_table函數中的margins參數用於增加數據透視表的彙總值。默認情況下margins的狀態爲False。需要增加透視表的彙總值時將margins值改爲True即可。此時數據透視表將顯示不同維度下數據的彙總值。彙總值的計算方式以aggfunc的一致。換句話說,如果aggfunc中設置的是求和,那麼彙總值也是求和值。

1

pd.pivot_table(lc,index=["grade"],values=["loan_amnt"],columns=["home_ownership","term"],aggfunc=[np.sum],fill_value=0,margins=True)


最後,我們總結下pandas.pivot_table函數與數據透視表的對應關係。將每部分以不同顏色進行區分,index對應了數據透視表中行的索引部分(淺藍色),values對應了數值的部分(綠色),columns對應了列的部分,(橙色表示主維度,黃色表示次級維度),aggfunc對應了數值的計算方式(紫色),並顯示數據透視表的最頂部進行說明(sum)。Margins對應了數據透視表中值彙總的部分 (深藍色)。

 

 

參考文獻:http://www.cnblogs.com/stream886/p/6022125.html

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