Python合并多个CSV文件报错:数据标记化错误求助
解决CSV合并时的ParserError问题
你的报错pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 243, saw 4本质是某个CSV文件的格式不符合预期:pandas默认按逗号解析,但该文件的第243行出现了额外的分隔符,或者文件实际使用的不是逗号作为分隔符,导致字段数不匹配。
以下是具体解决步骤:
1. 定位出错的具体文件
先把列表推导式改成循环捕获错误,找出哪个文件有问题:
import glob import pandas as pd files = glob.glob("D:\\green_lake\\Projects\\covid_19\\tabelas_relacao\\acre\\*.csv") dfs = [] for file_path in files: try: df = pd.read_csv(file_path) dfs.append(df) except Exception as err: print(f"文件 {file_path} 解析失败: {err}") # 合并正常读取的文件 if dfs: files_merged = pd.concat(dfs, ignore_index=True)
运行后会输出出错的文件名,你可以直接打开该文件检查第243行的内容。
2. 针对出错文件的修复方案
方案一:指定正确的分隔符
很多非英文环境的CSV会用分号(;)或制表符(\t)做分隔符,而非逗号。你可以手动指定分隔符:
# 假设是分号分隔 df = pd.read_csv(file_path, sep=';') # 如果是制表符分隔 df = pd.read_csv(file_path, sep='\t') # 自动检测分隔符(适合不确定的情况) df = pd.read_csv(file_path, sep=None, engine='python')
方案二:跳过错误行
如果只是个别行格式错误,不想修改原文件,可以直接跳过这些行(pandas 1.4.0及以上版本支持):
df = pd.read_csv(file_path, on_bad_lines='skip')
旧版pandas可以用error_bad_lines=False(已被弃用,建议升级pandas)。
方案三:检查文件编码
如果文件编码不是默认的utf-8,也可能导致解析异常,尝试指定编码:
# 常见编码:utf-8、latin-1、gbk df = pd.read_csv(file_path, encoding='latin-1')
3. 确保所有CSV格式统一
合并前确认所有CSV文件的列数、列名、分隔符一致,否则合并后会出现列错位或缺失的问题。如果列名不一致,可以用pd.read_csv的names参数指定统一列名,或者手动调整每个文件的列。
内容的提问来源于stack exchange,提问作者Leonardo Henrique
相关产品推荐
相关产品推荐

