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

Pandas read_csv读取含未转义引号CSV文件出现坏行错误解决方案咨询

问题核心是你拿到的CSV不符合RFC4180标准,字段内容内的双引号没有做转义(标准要求要么加转义符,要么写两个连续双引号),导致解析器无法区分字段边界和内容引号,以下是可行的处理方案:

方案1:调整csv读取参数适配非标准格式

改用容错性更高的Python解析引擎,搭配自定义引号相关参数适配未正确转义的嵌套双引号场景,代码示例:

import pandas as pd
import csv

ch = pd.read_csv(
    file,
    chunksize=100000,
    low_memory=False,
    encoding="iso-8859-1",
    engine="python",  # Python引擎对非标准格式的容错性远高于默认C引擎
    quotechar='"',
    doublequote=False,  # 不将连续双引号识别为转义字符,适配单双引号嵌套场景
    on_bad_lines="warn"  # 若仍有异常行先打印排查,不需要丢行可传入自定义处理函数
)
df = pd.concat(ch)

方案2:预修复文件引号问题后读取

如果参数调整无法覆盖所有异常行,可以先按行读取文件,统一修复内容中的引号规则后再传给pandas解析:

import pandas as pd
from io import StringIO

# 按行读取并修复引号
with open(file, "r", encoding="iso-8859-1") as f:
    raw_lines = f.readlines()
fixed_lines = []
for line in raw_lines:
    # 修复逻辑:仅保留字段边界的双引号,字段内部的双引号统一加转义符
    quote_parts = line.split('"')
    if len(quote_parts) <= 2:
        fixed_lines.append(line)
        continue
    # 首尾为边界引号无需转义,中间所有引号统一转义
    fixed_line = quote_parts[0] + '"' + '\\"'.join(quote_parts[1:-1]) + '"' + quote_parts[-1]
    fixed_lines.append(fixed_line)

# 读取修复后的内容
ch = pd.read_csv(
    StringIO("".join(fixed_lines)),
    chunksize=100000,
    low_memory=False,
    quotechar='"',
    encoding="iso-8859-1"
)
df = pd.concat(ch)

你可以根据实际CSV格式调整修复逻辑,如果字段内容中不存在分隔符,也可以直接按分隔符拆分后再逐个去除字段首尾的引号。

方案3:跳过引号解析手动处理字段

如果你的CSV分隔符不会出现在任何字段内容中,可以完全禁用引号解析,拆分后再手动清理每个字段的多余引号:

import pandas as pd
import csv

ch = pd.read_csv(
    file,
    chunksize=100000,
    low_memory=False,
    encoding="iso-8859-1",
    sep=",",  # 替换为你实际使用的分隔符
    quoting=csv.QUOTE_NONE,  # 完全禁用引号解析逻辑
    quotechar=None
)
df = pd.concat(ch)

# 清理所有字符串类型字段首尾的多余双引号
for col in df.select_dtypes(include=["object"]).columns:
    df[col] = df[col].str.strip('"')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:45:02