如何用Pandas统计DataFrame各列唯一值的出现次数?
正确实现列唯一值计数的方法
你的原代码存在逻辑错误:循环df["Month"]会遍历该列的每个具体值(如"Jan"、"Feb"),而非列名,后续用这些值去索引Series会触发KeyError——因为Series的索引是行号而非列取值。
以下是两种高效的实现方式:
1. 先构建对应数据集
import pandas as pd data = { "Station": ["A", "A", "A", "B", "B", "C", "D"], "Month": ["Jan", "Feb", "Jan", "Mar", "Mar", "Apr", "Feb"], "Year": [2021]*7 } df = pd.DataFrame(data)
2. 方法一:逐列遍历统计
遍历DataFrame的列名,对每一列调用value_counts()方法,直接得到唯一值的出现次数:
for col in df.columns: print(f"=== {col} 列统计 ===") print(df[col].value_counts()) print()
输出结果:
=== Station 列统计 === A 3 B 2 C 1 D 1 Name: Station, dtype: int64 === Month 列统计 === Jan 2 Feb 2 Mar 2 Apr 1 Name: Month, dtype: int64 === Year 列统计 === 2021 7 Name: Year, dtype: int64
3. 方法二:批量获取所有列统计结果
使用apply()方法对整个DataFrame批量处理,同时得到所有列的唯一值计数:
count_result = df.apply(pd.Series.value_counts) print(count_result)
输出结果:
Station Month Year 2021 NaN NaN 7.0 A 3.0 NaN NaN Apr NaN 1.0 NaN B 2.0 NaN NaN D 1.0 NaN NaN Feb NaN 2.0 NaN Jan NaN 2.0 NaN Mar NaN 2.0 NaN
其中NaN表示该值在对应列中不存在,数值则为该值的出现次数。
内容的提问来源于stack exchange,提问作者Niamh
相关产品推荐
相关产品推荐

