如何为多份大体积表格文件新增列统计第3列值的出现次数?
高效批量处理大表格:新增列统计指定列的出现次数
嘿,我太懂你这种困扰了——用Excel公式怼超大表格,要么卡到死机,要么批量处理起来要疯掉。针对你要给6列表格新增第7列(统计第3列数值出现次数)的需求,给你两个靠谱的方案,既能保留所有原有列,又能高效搞定批量文件:
方案一:用Python Pandas(新手友好,灵活度高)
Pandas处理表格数据简直是神器,尤其是大文件和批量操作场景,比Excel快N倍。
步骤:
- 先装Pandas(没装的话在终端跑这个):
pip install pandas
- 运行下面的脚本(记得替换成你的文件夹路径和文件后缀):
import pandas as pd import os # 替换成你的表格文件所在文件夹路径 target_folder = "C:/你的表格文件夹路径" # 遍历文件夹里的所有表格文件(支持csv/xlsx,改后缀就行) for file_name in os.listdir(target_folder): if file_name.endswith((".csv", ".xlsx")): file_path = os.path.join(target_folder, file_name) # 读取文件,xlsx的话把read_csv换成read_excel df = pd.read_csv(file_path) if file_name.endswith(".csv") else pd.read_excel(file_path) # 统计第3列的出现次数(Pandas列索引从0开始,第3列是索引2) value_counts = df.iloc[:, 2].value_counts() # 把统计结果映射回原表格,新增第7列(列名可以自己改) df['第3列出现次数'] = df.iloc[:, 2].map(value_counts) # 保存处理后的文件,避免覆盖原文件 new_file_name = f"{os.path.splitext(file_name)[0]}_processed{os.path.splitext(file_name)[1]}" save_path = os.path.join(target_folder, new_file_name) # 保存格式对应原文件 if file_name.endswith(".csv"): df.to_csv(save_path, index=False) else: df.to_excel(save_path, index=False) print(f"搞定:{new_file_name}")
为什么这个方案适合你?
- 完全保留原有6列,精准新增第7列的统计数据
- 自动批量处理整个文件夹的所有表格,不用手动一个个改
- 如果文件大到内存装不下,还可以加
chunksize参数分块处理,不会崩
方案二:用Awk命令(终端党首选,速度拉满)
如果你习惯用终端,Awk处理超大型文本表格的速度快到离谱,而且不用装额外工具(Linux/macOS自带,Windows可以装Git Bash或者WSL)。
单文件处理命令:
# 先统计第3列的出现次数,存临时文件 awk '{count[$3]++} END {for (val in count) print val, count[val]}' 你的输入文件.csv > count_temp.txt # 合并统计结果到原文件,新增第7列 awk 'NR==FNR {map[$1]=$2; next} {print $0, map[$3]}' count_temp.txt 你的输入文件.csv > 处理后的文件.csv # 清理临时文件 rm count_temp.txt
批量处理(Linux/macOS):
for file in *.csv; do awk '{count[$3]++} END {for (val in count) print val, count[val]}' "$file" > temp.txt awk 'NR==FNR {map[$1]=$2; next} {print $0, map[$3]}' temp.txt "$file" > "${file%.csv}_processed.csv" rm temp.txt done
解决你之前的问题:
你之前遇到的「只显示第7列」应该是只输出了统计结果,没和原文件合并;「能打印全部列但组合失败」大概率是映射统计值的时候匹配逻辑错了(比如列索引对应不对)。上面两个方案都是先统计、再把统计值精准映射回每一行,完美避免这两个问题。
内容的提问来源于stack exchange,提问作者Agu_S
相关产品推荐
相关产品推荐

