"高效使用pandas的value counts()" 修訂間的差異
(创建页面,内容为“数据科学家通常将大部分时间花在探索和预处理数据上。当谈到数据分析和理解数据结构时,Pandas value_counts() 是最受欢迎的...”) |
(無差異)
|
於 2022年3月20日 (日) 18:34 的最新修訂
數據科學家通常將大部分時間花在探索和預處理數據上。當談到數據分析和理解數據結構時,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
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.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()