如何将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
相关产品推荐
相关产品推荐

