合并同表头CSV文件后,pd.read_csv读取报错的问题排查
问题原因及解决办法
1. Shell合并命令的致命错误
你用的第二个命令file2.csv | tail -n +2 > file_merged.csv里,>是覆盖写入,会把之前写入的file1.csv内容完全清空,最终file_merged.csv里只有file2.csv去掉表头的数据,根本没完成两个文件的合并。正确的合并应该用追加符号>>:
# 先写入第一个文件的完整内容(含表头) cat file1.csv > file_merged.csv # 再追加第二个文件去掉表头的内容 tail -n +2 file2.csv >> file_merged.csv
2. 字段不匹配的深层原因
即使修正了命令,仍可能出现ParserError,结合报错信息“Expected 4 fields in line 1391, saw 7”,说明合并后的文件第1391行的字段数和表头不一致,常见原因:
- 某行数据包含CSV分隔符(比如逗号)但未用双引号包裹,单独读取时pandas可能自动兼容,但合并后触发严格校验
- 其中一个CSV文件存在行尾换行异常、数据截断的情况
- 不同文件的表头看似相同,但实际字段数有细微差异(比如某个文件表头有隐藏空格)
排查与修复步骤
- 定位问题行:用shell命令直接查看出错的行:
对比表头字段数,检查是否有未转义的分隔符或格式异常。sed -n '1391p' file_merged.csv - 修复数据格式:对包含分隔符的字段用双引号包裹,确保每行字段数和表头一致。
- 读取时兼容处理:如果暂时无法修复数据,可以在
pd.read_csv中添加参数跳过错误行:
或用df = pd.read_csv('file_merged.csv', on_bad_lines='skip')on_bad_lines='warn'查看具体错误详情。
内容的提问来源于stack exchange,提问作者maciejwww
相关产品推荐
相关产品推荐

