You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动