Jupyter中使用pandas.read_csv加载csv文件报ParserError错误如何解决
pandas读取csv文件ParserError报错解决方案
报错原因
出现ParserError: Error tokenizing data. C error: Expected 1 field in line 12, saw 2报错的核心原因是pandas默认使用的字段分隔符与csv文件实际的分隔符不匹配:
- pandas默认把逗号
,作为csv文件的分隔符,你的文件前11行没有逗号,因此pandas判定每行仅包含1个字段 - 第12行出现了非逗号的分隔符(常见为空格、分号、制表符),pandas识别到2个字段,和前11行的字段数不一致,因此抛出解析错误
- 你之前尝试的修改方案没有解决核心问题:
error_bad_lines=False会直接跳过格式异常的行导致数据丢失,且该参数在pandas 2.0及以上版本已被弃用;sep='\n'会把整行内容作为单个字段读取,不会拆分多列,自然无法得到正常的结构化数据。
解决方法
步骤1:确认文件实际分隔符
你可以先通过以下代码读取文件前15行,查看字段之间实际的分隔符号:
with open(r'C:/Users/kharm/Dropbox/Jupyter/Assignment/AutoInsurSweden.csv', 'r', encoding='utf-8') as f: for _ in range(15): print(repr(f.readline()))
从输出内容即可直接看到字段之间的分隔符号。
步骤2:指定正确分隔符读取
根据确认的分隔符,在pd.read_csv中通过sep参数指定即可:
- 若为分号分隔:
sep=';' - 若为制表符分隔:
sep='\t' - 若为任意数量空格分隔:
sep='\s+'
示例代码:
import pandas as pd # 请将sep参数替换为你确认的实际分隔符 data = pd.read_csv(r'C:/Users/kharm/Dropbox/Jupyter/Assignment/AutoInsurSweden.csv', header=None, sep=';') data.head()
异常兼容处理
如果读取时出现编码报错,可以额外指定编码格式,常用编码为utf-8、gbk、latin-1,示例:
data = pd.read_csv(r'C:/Users/kharm/Dropbox/Jupyter/Assignment/AutoInsurSweden.csv', header=None, sep=';', encoding='gbk')
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

