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

如何将pandas DataFrame各列value_counts结果正确导出为CSV格式

你现有代码的问题在于,df[c].value_counts()返回的是带索引的Series类型,直接将多个这样的Series存入字典后调用pd.DataFrame(freq.items()),只会生成「列名、对应Series对象」两列数据,不会自动展开统计的取值和频次。

下面给两种常用的导出实现,对应不同的输出格式需求:

方案1:各列统计结果横向并排展示

输出CSV的格式为:每两列对应一个原始字段的统计结果,依次为[字段名_取值, 字段名_频次],适合直接查看不同字段的分布。

import seaborn as sns
import pandas as pd

# 加载数据
df = sns.load_dataset('mpg')
file_path = "列频次统计_横向版.csv"

# 生成单字段统计结果列表
freq_dfs = []
for col in df.columns:
    # 把单字段的value_counts转为两列的DataFrame
    col_freq = df[col].value_counts().reset_index()
    col_freq.columns = [f"{col}_取值", f"{col}_频次"]
    freq_dfs.append(col_freq)

# 横向拼接所有统计结果,长度不同的位置自动补空值
result_df = pd.concat(freq_dfs, axis=1)

# 导出CSV,指定编码避免中文乱码
result_df.to_csv(file_path, index=False, encoding="utf-8-sig")

方案2:所有统计结果纵向统一展示

输出CSV的格式为三列:字段名、取值、频次,所有字段的统计结果逐行排列,适合后续做数据加工处理。

import seaborn as sns
import pandas as pd

# 加载数据
df = sns.load_dataset('mpg')
file_path = "列频次统计_纵向版.csv"

freq_list = []
for col in df.columns:
    col_freq = df[col].value_counts().reset_index()
    col_freq.columns = ["取值", "频次"]
    # 新增字段名列标记当前统计属于哪个原始列
    col_freq.insert(0, "字段名", col)
    freq_list.append(col_freq)

# 纵向拼接所有统计结果
result_df = pd.concat(freq_list, axis=0)

# 导出CSV
result_df.to_csv(file_path, index=False, encoding="utf-8-sig")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:24:02