如何移除CSV数据集中重复出现在中间的列名
移除CSV中重复的列名行(仅保留首行列名)
问题描述
我有一个由多个CSV文件合并而成的数据集,合并后数据中间重复出现了列名,现在需要移除所有出现在数据集中的重复列名,只保留顶部的一组列名。
当前CSV内容
col1 col2 col3 1 2 3 1 2 3 1 2 3 1 2 3 col1 col2 col3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 col1 col2 col3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 col1 col2 col3 col1 col2 col3 1 2 3 1 2 3 1 2 3 1 2 3
期望结果
col1 col2 col3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
解决方案
方法1:Python脚本处理
用Python读取文件,保留首行列名,过滤掉后续所有和列名一致的行:
input_file = "input.csv" output_file = "output.csv" with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out: # 读取并写入首行列名 header = f_in.readline().strip() f_out.write(header + '\n') # 遍历剩余行,仅写入非列名行 for line in f_in: stripped_line = line.strip() if stripped_line != header: f_out.write(line)
方法2:命令行awk工具处理
如果熟悉Linux/Unix命令行,可直接用awk快速处理:
awk 'NR==1 || $0!=$header' header="$(head -1 input.csv)" input.csv > output.csv
NR==1:保留第一行首行列名$0!=$header:后续行内容和首行不一致则保留header="$(head -1 input.csv)":提前获取首行内容作为对比基准
注意事项
- 若CSV用逗号分隔而非空格,上述代码依然适用,只需确保列名行的匹配逻辑准确
- 若列名行存在前后空格差异,Python脚本中已通过
strip()统一处理后再对比
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

