如何统计多列唯一值及对应行数并优化CSV导出格式?
简化多列唯一值统计及导出流程
针对你处理136列数据、统计每列唯一值及对应行数的需求,完全可以用Pandas内置方法大幅简化流程,同时解决导出CSV时唯一值以列表存储在单个单元格的问题,以下是优化方案:
核心优化思路
直接利用Pandas的value_counts()(统计每个唯一值的出现次数)和nunique()(统计每列唯一值总数)方法,替代手动遍历和判断,既高效又避免逻辑错误。
完整实现代码
1. 导出每列所有唯一值及对应行数(每行一个唯一值)
这个方案会把每列的每个唯一值-计数对拆成单独行,导出后CSV结构更清晰,不会出现列表嵌套在单元格的情况:
import pandas as pd # 读取Excel文件 df = pd.read_excel(filename) # 收集每列的唯一值及计数 result_rows = [] for col_name in df.columns: # 统计当前列的唯一值出现次数,自动排除NaN value_count = df[col_name].value_counts(dropna=True) # 把每个唯一值和计数整理成字典,加入结果列表 for unique_val, count in value_count.items(): result_rows.append({ 'Data Source Field': col_name, 'Unique Value': unique_val, 'Count': count }) # 转成DataFrame并导出CSV result_df = pd.DataFrame(result_rows) result_df.to_csv('unique_values_with_counts.csv', index=False)
2. 导出每列的唯一值总数(仅统计不重复值的数量)
如果只需要每列有多少个非空唯一值,用以下代码一键生成:
# 统计每列的非空唯一值数量 unique_count_df = df.nunique(dropna=True).reset_index() unique_count_df.columns = ['Data Source Field', 'Unique Value Count'] unique_count_df.to_csv('unique_count_per_column.csv', index=False)
原代码存在的问题说明
- NaN判断错误:用
entry == 'nan'或entry == 'NaN'无法识别Pandas中的NaN(NaN是float类型的特殊值),正确判断非空值应该用pd.notna(entry)。 - 逻辑错误:原代码中
if not entry =='nan' or not entry == 'NaN'的逻辑会导致所有值都被计数(or的逻辑只要一个条件成立就执行),应该改为and,但更推荐用内置方法自动处理空值。 - 效率低下:手动遍历去重、存列表的方式,远不如Pandas的向量化内置方法高效,尤其面对136列的大数据量时,差距会很明显。
内容的提问来源于stack exchange,提问作者Afiq Amran
相关产品推荐
相关产品推荐

