如何将DataFrame多列的value_counts结果全部写入CSV文件?
解决方法
你的问题出在循环里每次都用df2 = df[col].value_counts()覆盖之前的结果,最后只保留了最后一列的统计数据。要把所有列的结果都写入CSV,需要先收集每列的统计结果,再合并成一个完整的DataFrame后保存。
这里提供两种实用的方案:
方案一:循环收集结果(直观易理解)
这种方式适合新手,步骤清晰,容易调试:
import pandas as pd df = pd.read_csv("hcp.csv") count_results = [] for col in df.columns: # 对当前列做值统计,重置索引并设置列名 col_stats = df[col].value_counts().reset_index() col_stats.columns = ["取值", "出现次数"] # 添加一列标记当前统计的是哪一列 col_stats["列名"] = col # 将当前列的统计结果加入列表 count_results.append(col_stats) # 合并所有列的统计结果 final_df = pd.concat(count_results, ignore_index=True) # 写入CSV,去掉默认索引 final_df.to_csv("new_hcp.csv", index=False)
方案二:用apply简化代码(更简洁)
如果熟悉pandas的apply方法,可以用更简洁的方式完成:
import pandas as pd df = pd.read_csv("hcp.csv") # 对每列应用value_counts,堆叠后重置索引并设置列名 final_df = df.apply(pd.Series.value_counts).stack().reset_index() final_df.columns = ["取值", "列名", "出现次数"] # 保存到CSV final_df.to_csv("new_hcp.csv", index=False)
两种方案都会生成包含所有列统计结果的CSV,每行对应某一列的某个取值及其出现次数,方便后续分析。
内容的提问来源于stack exchange,提问作者Muhammad Rehan
相关产品推荐
相关产品推荐

