Pandas之數據分箱/分組/聚合/透視表
No.1 數據分箱
No.2 數據分組
No.3 數據聚合
No.4 透視表
No.1 數據分箱
說到數據分箱。其實每個人都很熟悉,大家在買蘋果的時候啊,會知道,水果店會把不同大小的或者新鮮程度的各種蘋果放在不同的箱子裡面供你挑選,當然價格也會有所不同。
其實這就是數據分箱,再舉例,學生的考試成績,0-59分是不合格,60-69是合格,70-79是良好,80-100是優秀。那這其實也是數據分箱,說到這裡數據分箱什麼意思也就明白了。
那下面就用notebook寫代碼來演示數據分箱。
首先創建一個長度為20的,範圍在30-100之間的學生分數的數組。
然後我們再設置分箱。
這就表示數據有0-59,59-70,70-80,80-100這幾個等級。
下面把分箱和分數利用cut方法結合到一起。
這裡表示0-59分的一共有12名同學,80-100有5名同學,下面以此類推。
下面就創建一個DataFrame,把數據放進去,再隨機生成字元串表示學生姓名。
這下是不是很明白了,每個學生對於什麼成績,每個成績對於什麼等級都很清楚了,這裡就是把分箱的幾個範圍用以易懂的低、中、高這樣的字樣來替代了而已。
No.2 數據分組
數據分組的話其實應該更加熟悉,其實就是group by,這個在sql裡面應該是常見的,比如隨便寫一個sql用group by 按照條件分組:
select * from table_1 left join table_2 where xxx group by xxx
看,其實這不就是數據分組,所以這裡面要講的數據分組和這個也是一個意思。
廢話不多說,首先讀取一個天氣的csv文件進來。
數據裡面有城市,有溫度和風力數據,下面就用groupby來按照城市分組看看。
g.groups告訴我們分組的結果,按照城市分的很清楚。
但是這不是我們要的,我們要的是像sql一樣得到一張新的表格。怎麼操作呢?
是不是有了。熟悉的配方熟悉的味道。
我們還可以對這個新的數據做更多的操作,比如求個平均值,不僅僅可以求分組的平均值,這個原始數據平均值也可以直接求得。
是不是hin??比,還可以查看每一個城市的最大最小值。
還可以dict、list之間互相轉換。
還可以有for循環。
到這裡數據分組就寫完了。
No.3 數據聚合
其實就是agg聚合嘛,直接看代碼吧。
還是基於天氣數據,先把數據拿進來。
然後自定義一個函數,用來當作聚合函數。
顯然這裡的聚合函數是用每個城市相應列的數據的最大值減去最小值。
下面再按照city和wind分組。
看看按照一個分組和兩個分組的區別。
按照city和wind分組的就不能直接寫BJ了,需要指定對應的風力值。
同樣的你也可以for循環。
No.4 透視表
其實透視表的概念來自於excel,先讀一個excel表格進來。
那怎麼根據這張表生成一個透視表呢?
透視表做出來了,我們仔細看一看這張表,其實就是按照Name把Account去重了,再把Price和Quantity做了一個平均值,其實就是聚合操作嗎,我們看一下源碼。
是不是一個agg操作,而且默認是mean也就是平均值,那其實可以更改這個agg函數,我們看。
是不是從平均值到求和了。還可以多添加幾個透視表參數進去。
然後再按照Manager生成透視表。
好像和前面的不一樣,因為每一個Manager下面可能會有好多個銷售代表。
還可以指定想看的某一列value。
最後你還可以添加columns進去,比如。
這裡是什麼意思呢?首先看代碼,還是按照兩個欄位做的透視表,聚合還是sum,添加了Product這一項,fill_value是因為可能有的銷售沒有賣到某個產品導致某個地方為NaN,所以可以填充數據。
然後看錶格,前面都是一樣的,加了Product之後可以看到,每一件產品的價格和銷售數量以及對應的銷售代表買了多少都很清楚的展示了出來,前面是價格後面是數量,所以這個功能還是很好的。
-----------------------------------------------------------------------------------
到此,Pandas之數據分箱/分組/聚合/透視表就寫完了。
推薦閱讀:
※數據科學,機器學習和人工智慧有什麼區別?
※對數據科學感興趣?先看看這些
※如何看待 Kaggle 发布的 Zillow 房价预测比赛?