Pandas read_csv函数报错求助:Jupyter Notebook预处理遇ParserError
解决Jupyter Notebook中pd.read_csv的ParserError问题
嘿,刚入门数据科学就碰到这个问题太正常了!我来帮你梳理下这个ParserError的常见原因和对应的解决办法:
1. 编码不匹配
你指定了encoding='utf_8',但很可能你的data.csv实际编码并不是UTF-8——比如中文文件经常用GBK、GB2312,或者带BOM的UTF-8(也就是utf_8_sig)。
解决办法:
- 先检测文件的真实编码:
import chardet # 读取文件二进制内容检测编码 with open('data.csv', 'rb') as f: encoding_result = chardet.detect(f.read()) # 打印检测到的编码 print(f"检测到的文件编码:{encoding_result['encoding']}") - 用检测到的编码重新读取:
country = pd.read_csv('data.csv', encoding=encoding_result['encoding']) - 如果检测结果是
UTF-8-SIG,可以直接用encoding='utf_8_sig'试试,这能处理带BOM的UTF-8文件。
2. 分隔符不符合默认规则
CSV默认用逗号作为分隔符,但很多时候数据集会用制表符(\t)、分号(;)甚至空格来分隔字段,这会导致解析器无法正确识别列,抛出ParserError。
解决办法:
- 指定正确的分隔符,比如:
# 制表符分隔的情况 country = pd.read_csv('data.csv', encoding='utf_8', sep='\t') # 分号分隔的情况 country = pd.read_csv('data.csv', encoding='utf_8', sep=';') # 不确定分隔符时,用正则匹配任意空白字符 country = pd.read_csv('data.csv', encoding='utf_8', sep='\s+') - 同时可以加上
engine='python'参数,Python引擎比默认的C引擎容错性更强,能处理一些不规范的CSV格式。
3. 文件存在格式错误的行
比如某行有未闭合的引号、意外的换行符,或者字段数量和表头不匹配,都会触发解析错误。
解决办法:
- 跳过有问题的行:
country = pd.read_csv('data.csv', encoding='utf_8', on_bad_lines='skip') - 或者只警告不跳过,方便查看哪行有问题:
country = pd.read_csv('data.csv', encoding='utf_8', on_bad_lines='warn') - 如果是引号问题,可以指定引号处理规则(需要先导入csv模块):
import csv country = pd.read_csv('data.csv', encoding='utf_8', quoting=csv.QUOTE_ALL)
你可以先从编码检测开始排查,这是最常见的原因!
内容的提问来源于stack exchange,提问作者Amin Memariani




