You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中对多列自动化执行value_counts()并规整输出?

批量生成DataFrame所有列的value_counts分布统计

这确实是处理大维度数据集时的常见痛点!手动逐个列执行value_counts()不仅效率低,还会让notebook变得杂乱无章。给你几个实用的自动化方案,既能高效完成统计,又能让输出保持整洁:

方案1:用apply批量生成结构化统计结果

直接利用pandas的apply方法,一次性计算所有列的分布,并整理成易读的DataFrame:

import pandas as pd

# 批量计算所有列的value_counts,返回一个由Series组成的字典
counts_dict = df.apply(pd.Series.value_counts)

# 转置后得到每行对应原数据一列的统计DataFrame
counts_df = counts_dict.T
  • counts_df中,每一行代表原DataFrame的一列,每一列是该列的取值,单元格数值为对应频次
  • 如果需要统计缺失值的数量,可以加上dropna=False参数:df.apply(lambda x: x.value_counts(dropna=False))

方案2:循环存储/打印带标识的统计结果

如果希望保留每个列的独立统计结果,同时避免刷屏,可以将结果存入字典,或打印时添加列名分隔标识:

# 创建字典存储每个列的统计结果,方便后续调用
column_counts = {}

for col in df.columns:
    # 计算当前列的分布,包含缺失值统计
    col_stats = df[col].value_counts(dropna=False)
    column_counts[col] = col_stats
    
    # 打印带标识的结果,用分隔线区分不同列
    print(f"--- {col} 分布统计 ---")
    print(col_stats)
    print("\n")

后续需要查看某一列的结果时,直接通过column_counts['column name']调用即可,不用重复计算。

方案3:批量生成可视化分布图表

如果想更直观地观察所有列的分布,可以循环生成柱状图,一次性展示所有结果:

import matplotlib.pyplot as plt
import seaborn as sns

# 设置图表布局:每行4个图,根据列数计算所需行数
total_cols = len(df.columns)
rows = (total_cols + 3) // 4  # 向上取整计算行数

# 创建画布
plt.figure(figsize=(16, rows * 4))

for idx, col in enumerate(df.columns):
    # 子图位置
    plt.subplot(rows, 4, idx + 1)
    # 绘制计数图
    sns.countplot(data=df, x=col)
    # 设置标题和旋转x轴标签,防止重叠
    plt.title(f"{col} 分布")
    plt.xticks(rotation=45)

# 自动调整子图间距
plt.tight_layout()
plt.show()

额外小技巧:筛选特定类型的列

如果只需要处理分类列(如object或category类型),可以先筛选列再执行统计:

# 筛选出分类类型的列
categorical_cols = df.select_dtypes(include=['object', 'category']).columns

# 针对筛选后的列执行上述任意方案
for col in categorical_cols:
    print(f"--- {col} 分布统计 ---")
    print(df[col].value_counts(dropna=False))
    print("\n")

内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:36:59