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

如何使用pandas read_csv读取含逗号及嵌套双引号的CSV文件

如何用pandas读取含嵌套双引号和内部逗号的非标准CSV

你碰到的这个CSV属于非标准格式——正常CSV规范里,嵌套双引号需要用两个连续双引号转义(比如"ABC is not ""XYZ"", but ABC"),但你的数据里是单个双引号嵌套,还包含内部逗号,直接用read_csv会出现解析错误。下面给两种实用的解决办法:

方法一:先修复CSV格式再读取

先把文件里的嵌套单个双引号替换成标准的双转义双引号,再正常读取:

import pandas as pd

# 读取原始文件内容,替换嵌套的单双引号
with open('你的文件.csv', 'r', encoding='utf-8') as f:
    content = f.read().replace('"XYZ"', '""XYZ""')

# 将修复后的内容保存为新文件(也可用StringIO直接在内存处理)
with open('修复后文件.csv', 'w', encoding='utf-8') as f:
    f.write(content)

# 正常读取修复后的CSV
df = pd.read_csv('修复后文件.csv')

如果嵌套双引号的内容不固定,用正则批量替换更灵活:

import re
# 匹配引号内的单个双引号并替换为两个
content = re.sub(r'(?<=[^,])"([^",]+)"(?=[^,])', r'""\1""', content)

方法二:自定义解析逻辑处理非标准格式

用Python内置的csv.reader自定义解析规则,再转成DataFrame,适合没法提前修改文件的场景:

import pandas as pd
import csv

# 自定义CSV解析规则:关闭自动双引号转义,按逗号拆分后手动合并字段
class CustomCSV(csv.Dialect):
    delimiter = ','
    quotechar = '"'
    doublequote = False  # 关闭双引号自动转义
    skipinitialspace = True
    lineterminator = '\n'
    quoting = csv.QUOTE_MINIMAL

rows = []
with open('你的文件.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, dialect=CustomCSV)
    for row in reader:
        # 因内部逗号,原本的第二个字段会被拆成多个元素,手动合并还原
        if len(row) > 3:
            fixed_row = [row[0], ','.join(row[1:-1]), row[-1]]
            rows.append(fixed_row)
        else:
            rows.append(row)

# 转换为DataFrame
df = pd.DataFrame(rows)

注意:这个方法的合并逻辑需要根据你的实际CSV结构调整,如果嵌套引号的位置更复杂,需用正则匹配精准识别完整字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:36