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

使用pandas read_csv读取含嵌套引号CSV文件列数异常问题

解决pandas read_csv读取CSV时引号内逗号被误识别为分隔符的问题

你的CSV单行内容如下:

"Venta presencial",53232907737,"[{"was_pin":false,"pin_validation":"pin_not_validated","integration":"none","is_fallback":false}]"

使用默认代码df = pd.read_csv(filename,encoding='utf-8')读取时,第三列JSON内容里的逗号会被当成列分隔符,导致原本预期的3列变成6列。下面是几种解决方法:

方法1:修复CSV文件格式(优先推荐)

标准CSV规范中,字段内部的双引号需要用两个双引号转义。把第三列里的所有"替换为"",修改后的行内容如下:

"Venta presencial",53232907737,"[{""was_pin"":false,""pin_validation"":""pin_not_validated"",""integration"":""none"",""is_fallback"":false}]"

修改后直接用原代码读取,pandas会正确识别引号包裹的字段,忽略内部逗号,得到3列数据。

方法2:用正则表达式作为分隔符(无需修改原文件)

通过正则匹配不在成对双引号内的逗号作为分隔符,需要配合engine='python'使用:

import pandas as pd
import re

# 定义匹配规则:只匹配不在双引号内的逗号
sep_pattern = re.compile(r',(?=(?:[^"]*"[^"]*")*[^"]*$)')
df = pd.read_csv(filename, encoding='utf-8', sep=sep_pattern, engine='python')

方法3:预处理CSV内容(处理不规范的引号)

如果无法修改原文件,可以先逐行处理,转义第三列内部的双引号,再读取:

import pandas as pd
from io import StringIO

processed_lines = []
with open(filename, 'r', encoding='utf-8') as f:
    for line in f:
        # 仅分割前两个逗号,拆分出三个字段的雏形
        first_col, second_col, third_col = line.split(',', 2)
        # 转义第三列内的双引号
        escaped_third = third_col.replace('"', '""').strip()
        # 重新拼接成标准CSV行
        processed_lines.append(f'{first_col},{second_col},"{escaped_third}"')

# 从处理后的内容读取DataFrame
df = pd.read_csv(StringIO('\n'.join(processed_lines)), encoding='utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:15:31