資料科學家通常將大部分時間花在探索和預處理資料上。當談到資料分析和理解資料結構時,Pandas value_counts() 是最受歡迎的函式之一。該函式返回一個包含唯一值計數的系列。生成的Series可以按降序或升序排序,透過引數控制包括或排除NA。
在本文中,我們將探討 Pandas value_counts() 的不同用例。您將學習如何使用它來處理以下常見任務。
💡預設引數
💡按升序對結果進行排序
💡按字母順序排列結果
💡結果中包含空值
💡以百分比計數顯示結果
💡將連續資料分入離散區間
💡分組並呼叫 value_counts()
💡將結果系列轉換為 DataFrame
💡應用於DataFrame
1、預設引數
Pandas value_counts() 函式返回一個包含唯一值計數的系列。預設情況下,結果系列按降序排列,不包含任何 NA 值。例如,讓我們從 Titanic 資料集中獲取“Embarked”列的計數。
>>> df['Embarked'].value_counts()
S 644
C 168
Q 77
Name: Embarked, dtype: int64
2、按升序對結果進行排序
value_count() 返回的系列預設按降序排列。對於升序結果,我們可以將引數升序設定為 True。
>>> df['Embarked'].value_counts(ascending=True)
Q 77
C 168
S 644
Name: Embarked, dtype: int64
3、按字母順序排列結果
我們已經學習了引數升序以獲得按值計數 ASC 或 DESC 排序的結果。在某些情況下,最好按字母順序顯示我們的結果。這可以透過在 value_counts() 之後呼叫 sort_index(ascending=True) 來完成,例如
>>> df['Embarked'].value_counts(ascending=True).sort_index(ascending=True)
C 168
Q 77
S 644
Name: Embarked, dtype: int64
>>> df['Embarked'].value_counts(ascending = True).sort_index(ascending=False)
S 644
Q 77
C 168
Name: Embarked, dtype: int64
4、包括結果中的 NA
預設情況下,結果中會忽略包含任何 NA 值的行。有一個引數 dropna 來配置它。我們可以將該值設定為 False 以包含 NA 的行數。
>>> df['Embarked'].value_counts(dropna=False)
S 644
C 168
Q 77
NaN 2
Name: Embarked, dtype: int64
5、以百分比計數顯示結果
在進行探索性資料分析時,有時檢視唯一值的百分比計數會更有用。這可以透過將引數 normalize 設定為 True 來完成,例如:
>>> df['Embarked'].value_counts(normalize=True)
S 0.724409
C 0.188976
Q 0.086614
Name: Embarked, dtype: float64
如果我們更喜歡用百分號 (%) 格式化結果,我們可以設定 Pandas 顯示選項如下:
>>> pd.set_option('display.float_format', '{:.2f}%'.format)
>>> df['Embarked'].value_counts(normalize = True)
S 0.72%
C 0.19%
Q 0.09%
Name: Embarked, dtype: float64
6、將連續資料分入離散區間
Pandas value_counts() 可用於使用 bin 引數將連續資料分入離散區間。與 Pandas cut() 函式類似,我們可以將整數或列表傳遞給 bin 引數。
當整數傳遞給 bin 時,該函式會將連續值離散化為大小相等的 bin,例如:
>>> df['Fare'].value_counts(bins=3)
(-0.513, 170.776] 871
(170.776, 341.553] 17
(341.553, 512.329] 3
Name: Fare, dtype: int64
當列表傳遞給 bin 時,該函式會將連續值劃分為自定義組,例如:
>>> df['Fare'].value_counts(bins=[-1, 20, 100, 550])
(-1.001, 20.0] 515
(20.0, 100.0] 323
(100.0, 550.0] 53
Name: Fare, dtype: int64
7、分組並執行 value_counts()
Pandas groupby() 允許我們將資料分成不同的組來執行計算以進行更好的分析。一個常見的用例是按某個列分組,然後獲取另一列的唯一值的計數。例如,讓我們按“Embarked”列分組並獲取不同“Sex”值的計數。
>>> df.groupby('Embarked')['Sex'].value_counts()
Embarked Sex
C male 95
female 73
Q male 41
female 36
S male 441
female 203
Name: Sex, dtype: int64
8、將結果系列轉換為 DataFrame
Pandas value_counts() 返回一個Series,包括前面帶有 MultiIndex 的示例。如果我們希望我們的結果顯示為 DataFrame,我們可以在 value_count() 之後呼叫 to_frame()。
>>> df.groupby('Embarked')['Sex'].value_counts().to_frame()
9、應用於DataFrame
到目前為止,我們一直將 value_counts() 應用於 Pandas Series,在 Pandas DataFrame 中有一個等效的方法。Pandas DataFrame.value_counts() 返回一個包含 DataFrame 中唯一行計數的系列。
讓我們看一個例子來更好地理解它:
df = pd.DataFrame({
'num_legs': [2, 4, 4, 6],
'num_wings': [2, 0, 0, 0]},
index=['falcon', 'dog', 'cat', 'ant']
)
df
>>> df.value_counts()
num_legs num_wings
4 0 2
6 0 1
2 2 1
dtype: int64
透過在 df 上呼叫 value_counts(),它返回一個以 num_legs 和 num_wings 作為索引的 MultiIndex 系列。從結果中,我們可以發現有 2 條記錄的 num_legs=4 和 num_wing=0。
同樣,我們可以呼叫 to_frame() 將結果轉換為 DataFrame
>>> df.value_counts().to_frame()
總結
在本文中,我們探討了 Pandas value_counts() 的不同用例。我希望這篇文章能幫助你節省學習 Pandas 的時間。我建議您檢視 value_counts() API 的文件並瞭解您可以做的其他事情。感謝閱讀,本文的原始程式碼如下:
文章來源:DeepHub IMBA
文章連結:https://mp.weixin.qq.com/s/GF0xl3mNuRQXHgpFjS-Qog
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
回顧十週入門數據分析系列文:
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!