You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas读取CSV遇ParserError,转XLSX正常的原因咨询

CSV读取解析错误的原因与解决办法

为什么XLSX能正常读取,CSV却不行?

CSV是纯文本格式,完全依赖分隔符(比如你用的逗号)划分列。如果文本列里存在未被引号包裹的逗号,pandas的CSV解析器会把这些逗号误判为列分隔符,导致某一行的字段数超出预期(比如你遇到的第171行,文本里多了2个逗号,就被识别成14个字段)。

而XLSX是二进制格式,文件内部会记录每个单元格的位置和内容边界,不管单元格里有多少逗号,都能精准识别单元格范围,不会被文本中的分隔符干扰,所以转成XLSX后就能正常读取。

关于csv.Sniffer的疑问

你手动指定了sep=',',此时csv.Sniffer不会生效——只有设置sep=None时,pandas才会调用Sniffer自动检测分隔符。所以你的问题和Sniffer无关,核心是未处理文本列中的嵌入式分隔符。

解决CSV读取问题的实用方案

  • 启用引号识别:CSV规范中,包含分隔符的文本应该用引号包裹,通过quoting参数可让pandas正确识别这类文本:
    import csv
    df = pd.read_csv('file.csv', skiprows=2, sep=',', encoding='utf-8', quoting=csv.QUOTE_ALL)
    
    若只有部分文本用引号包裹,可尝试quoting=csv.QUOTE_MINIMAL。
  • 切换到Python解析引擎:默认的C引擎速度快但容错性差,换成Python引擎能更好处理格式不规范的CSV:
    df = pd.read_csv('file.csv', skiprows=2, sep=',', encoding='utf-8', engine='python')
    
  • 跳过错误行:如果暂时不需要错误行的数据,新版本pandas可使用on_bad_lines='skip'跳过有问题的行(旧版本用error_bad_lines=False):
    # pandas 1.3及以上版本
    df = pd.read_csv('file.csv', skiprows=2, sep=',', encoding='utf-8', on_bad_lines='skip')
    
  • 手动修复CSV:用文本编辑器打开CSV文件,定位到第171行,检查文本列内容,给包含逗号的文本加上双引号,保存后重新读取即可。

内容的提问来源于stack exchange,提问作者Tasos Dalis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:12:51