使用Pandas读取CSV触发ParserError,如何解决?
解决pandas读取CSV时的ParserError(字段数不匹配)
问题重现
执行以下代码加载CSV文件时出现错误:
# Load the DataFrame df = pd.read_csv("/content/data.csv", encoding='unicode_escape') df
错误信息:
ParserError Traceback (most recent call last) <ipython-input-11-5c1453a4783b> in <cell line: 2>() 1 # Load the DataFrame ----> 2 df = pd.read_csv("/content/data.csv", encoding='unicode_escape') 3 df 8 frames /usr/local/lib/python3.10/dist-packages/pandas/_libs/parsers.pyx in pandas._libs.parsers.raise_parser_error() ParserError: Error tokenizing data. C error: Expected 8 fields in line 25066, saw 11
尝试调整encoding和encoding_errors参数无效。
解决方法
这个错误和编码无关,核心原因是CSV文件的第25066行字段数量与表头/其他行不一致,通常是该行包含未转义的分隔符(比如逗号)、引号未闭合等格式问题。以下是几种解决思路:
1. 跳过错误行(快速临时方案)
使用on_bad_lines参数直接跳过格式错误的行,适合数据量较大、个别错误行不影响分析的场景:
# 跳过错误行 df = pd.read_csv("/content/data.csv", encoding='unicode_escape', on_bad_lines='skip') # 或者打印错误行警告但继续加载 df = pd.read_csv("/content/data.csv", encoding='unicode_escape', on_bad_lines='warn')
2. 定位并修复错误行(精准解决)
如果需要保留所有数据,先定位到问题行查看具体问题:
# 读取文件,定位第25066行(行号从1开始) with open("/content/data.csv", 'r', encoding='unicode_escape') as f: for line_num, line in enumerate(f, start=1): if line_num == 25066: print(f"第{line_num}行内容:\n{line}") print(f"实际字段数:{len(line.split(','))}")
查看该行是否存在以下问题:
- 字段内的逗号未用引号包裹(比如
张三,男,北京市,朝阳区是错误格式,正确应为张三,"北京市,朝阳区",男) - 引号未闭合(比如
"张三,男,北京市)
手动修改CSV文件的问题行后,再重新加载。
3. 调整解析参数(适配特殊格式)
如果CSV的分隔符、引号规则特殊,尝试指定解析参数:
- 指定引号字符,让解析器正确识别包含分隔符的字段:
df = pd.read_csv("/content/data.csv", encoding='unicode_escape', sep=',', quotechar='"')
- 使用Python解析引擎(容错性比默认的C引擎更高):
df = pd.read_csv("/content/data.csv", encoding='unicode_escape', engine='python')
内容的提问来源于stack exchange,提问作者Dhruva_Teja D R
相关产品推荐
相关产品推荐

