零基礎學習Python數據分析:數據處理模塊Pandas使用(3)

這一節將學習的是Pandas中對數據的一些統計計算與總結,在學習如何總結整個數據集之後,還將深入研究數據分組,從而允許我們匯總具有共同點的數據集。我們還將學習如何創建數據透視表,這是總結只有兩列的數據集數據間相關關係的好方法。

Unit 2 Data Manipulation with Pandas


Lesson 3 Aggregates in Pandas

一、DataFrame的統計計算

在前一課中,我們學習了如何對列中的每個值執行操作的.apply語句。在這一節中,我們將學習如何將列中的所有值組合計算。怎麼做呢,像Excel一樣,還是運用Python里的一些基本函數。一般的代碼模板如下

df.column_name.command()

先以幾個現實中的例子開始吧:

DataFrame customers包含了客戶姓名和年齡,求客戶年齡均值

print customers.age>> [23, 25, 31, 35, 35, 46, 62]print customers.age.median()>> 35

DataFrame shipments包含了銷售的T恤、顏色,求還剩下一件的都是啥顏色T恤

print inventory.color>> [blue, blue, blue, blue, blue, green, green, orange, orange, orange]print inventory.color.unique()>> [blue, green, orange]

看了上面兩個例子應該懂了,下面列出了一些常用的統計函數的含義。

二、分類統計

pandas提供了分類統計的語句和SQL中的一樣為.groupby。代碼模板如下

df.groupby(column1).column2.command()

數據按照column1進行分組為一組組數據,然後對column2執行command。

例如,學生的作業成績表中分別有學生名student和所做的作業assignment_name和所對應的成績grade三列。每個學生對應一或多套作業。

想要計算出不同學生的平均成績,代碼為

import pandas as pdstudent_grade = pd.read_csv(student_grade.csv)grades = student_grade.groupby(student).grade.mean()print(grades)print(type(grades))

在使用groupby之後,我們經常需要清理得到的數據結果。groupby函數創建了一個新的Series,而不是DataFrame。 為了得到一個新的DataFrame,我們可以使用reset_index()。 這將把我們的數據變成一個DataFrame,並將這些索引移動到它們自己的列中。

這時只需要在groupby語句後加reset_index()

df.groupby(column1).column2.measurement().reset_index()

例如計算庫存中每種茶件數,

teas_counts = teas.groupby(category).id.count().reset_index()teas_counts = teas_counts.rename(columns={"id": "counts"})print(teas_counts)

那麼,與上一節類似的,如果執行的函數比求平均值,計數等更為複雜,就要結合到Lambda函數和apply語句。假設要計算不同顏色鞋子價格的1/4分割線(25%鞋子便宜於此價格,75%的鞋子貴於此價格)來確保品牌一直有便宜的鞋子出售。

import numpy as npimport pandas as pdorders = pd.read_csv(orders.csv)cheap_shoes=orders.groupby(shoe_color).price.apply(lambda x: np.percentile(x,25)).reset_index()print(cheap_shoes)

reset_index()為最後一步

分類統計:更複雜的情況下,我們想要按多個列進行分組。 同樣可以用groupby語句來輕鬆完成此操作。

上列中,我們的採購團隊認為,某些shoe_type / shoe_color組合在今年特別受歡迎(例如,藍色芭蕾平底鞋曾在巴黎風靡一時)。於是看一下每種鞋子的件數shoe_counts(按shoe_type / shoe_color分類)。

import numpy as npimport pandas as pdorders = pd.read_csv(orders.csv)shoe_counts=orders.groupby([shoe_type,shoe_color]).id.count().reset_index()shoe_counts=shoe_counts.rename(columns={id:counts})#No apply functionprint(shoe_counts)

三、數據透視表

我們在學習Excel的時候都使用過數據透視表,它能直觀地展示數據。當我們跨越多列執行groupby時,我們經常想要更改數據的顯示方式。 例如,回想一下我們運營連鎖店的例子,並且有關於不同種類不同顏色鞋的銷售數量的數據:

我們懷疑不同種類的鞋的不同顏色會有不同的銷售額,那麼,比較兩表,這樣比較會更有效率,因為我們不會將shoe_type搞混了。

生成PIvot Table的模板為:

df.pivot(columns=ColumnToPivot, index=ColumnToBeRows, values=ColumnToBeValues)

例如,上面的數據透視表的代碼為

import numpy as npimport pandas as pdorders = pd.read_csv(orders.csv)shoe_counts = orders.groupby([shoe_type, shoe_color]).id.count().reset_index()shoe_counts_pivot=shoe_counts.pivot( columns=shoe_color, index=shoe_type, values=id).reset_index()print(shoe_counts_pivot)


Ps.我在學習pandas時,還學到了一個Python中 ~ (取反) 操作符。即如果結果是True,則返回False;結果為False,返回True。

創建新列反映某列是否為空值(是空值則返回False,反之True):

ad_clicks[is_click] = ~ad_clicks.ad_click_timestamp.isnull()

在前加~即可。


推薦閱讀:

Python寫碼注意事項
大數據時代,哪些課程最受歡迎?
有哪些關於 Python 的技術博客?
ELEMENTARY.02.Correct Sentence
第一章 Python數據模型

TAG:商業分析 | 大數據 | Python |