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

Pandas读取含内部双引号的CSV时如何保留正确格式?

解决Pandas读取非标准CSV时内部引号丢失的问题

这个问题出在你的CSV格式不符合标准规范——标准CSV中,字段内的双引号需要用两个双引号来转义(比如"A ""Great"" Experience"),但你的原始数据里是单个双引号,导致Pandas的解析器误把内部的引号当成了字段的结束标记,从而丢失了一个引号。

下面提供两种可行的解决方法:

方法一:用CSV模块自定义解析规则

直接利用Python内置的csv模块,通过设置escapechar参数来识别字段内的单个双引号,再转成DataFrame:

import csv
import pandas as pd

# 读取并解析文件
rows = []
with open(file2Name, 'r', encoding='utf-8') as f:
    # delimiter是分隔符|,quotechar是字段包围符",escapechar指定用"来转义内部的"
    reader = csv.reader(
        f,
        delimiter='|',
        quotechar='"',
        escapechar='"',
        quoting=csv.QUOTE_ALL,
        skipinitialspace=False
    )
    for row in reader:
        rows.append(row)

# 转成DataFrame(如果有表头就取第一行当列名,否则直接传入rows)
df = pd.DataFrame(rows)

这样解析后,你就能得到预期的结果:[1, A "Great" Experience, T]

方法二:预处理CSV文件,修正格式

如果需要长期处理这类非标准CSV,可以先把文件转换成标准格式(将内部单个双引号替换为两个),再用Pandas读取:

import pandas as pd

# 预处理文件
with open(file2Name, 'r', encoding='utf-8') as infile, open('fixed.csv', 'w', encoding='utf-8') as outfile:
    for line in infile:
        # 按|分割字段,处理每个字段内的引号
        parts = line.strip().split('|')
        fixed_parts = []
        for part in parts:
            if part.startswith('"') and part.endswith('"'):
                # 去掉首尾引号,替换内部"为"",再重新加引号
                inner_content = part[1:-1].replace('"', '""')
                fixed_parts.append(f'"{inner_content}"')
            else:
                fixed_parts.append(part)
        # 重新拼接成一行写入新文件
        outfile.write('|'.join(fixed_parts) + '\n')

# 读取修正后的标准CSV
df = pd.read_csv('fixed.csv', sep='|', keep_default_na=False, quoting=csv.QUOTE_ALL)

额外建议

如果可以控制CSV的生成源头,建议直接生成标准格式的CSV:把字段内的双引号用两个双引号转义,比如正确的行应该是:

"1"|"A ""Great"" Experience"|"T"

这样你原来的pandas.read_csv参数就能直接正确解析,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:24:08