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

如何在Pandas中读取含特殊引号格式的CSV文件

解决含特殊引号格式的CSV文件读取问题

问题场景

CSV文件以逗号为分隔符,原本用英文双引号"包裹含逗号的字段避免误解析,但字段内存在三种特殊引号格式,导致Pandas的read_csv无法正确识别字段边界,出现列错位、行跳过或报错:

  • 转义双引号:\"
  • 双单引号:''
  • 未转义的中文左双引号:“(全角字符)

示例数据

表头:开始日期,结束日期,产品编码,是否可用,品类排名,品牌,名称,品类,价格
异常数据行:

2022-10-05,2022-10-10,3716372837,1.0,"",brand1,"世界拼图地图,300片,23” x 15\",全年龄段适用",Games,39.99

该行中"世界拼图地图,300片,23” x 15\",全年龄段适用"应被识别为单个字段,但中文引号“会被误判为字段结束,导致解析失败。


解决方案

方案1:预处理CSV文件(推荐)

先统一修正文件中的异常引号,再用Pandas读取:

1. 编写预处理脚本

遍历每行,将异常引号转换成Pandas可识别的格式:

import csv

input_file = "your_input.csv"
output_file = "cleaned_csv.csv"

with open(input_file, 'r', encoding='utf-8') as in_f, open(output_file, 'w', encoding='utf-8', newline='') as out_f:
    reader = csv.reader(in_f)
    writer = csv.writer(out_f, quotechar='"', escapechar='\\', quoting=csv.QUOTE_MINIMAL)
    
    for row in reader:
        cleaned_cells = []
        for cell in row:
            # 把中文左引号替换成转义双引号
            cell = cell.replace('“', '\\"')
            # 把双单引号替换成单个单引号(可选,根据业务需求调整)
            cell = cell.replace("''", "'")
            cleaned_cells.append(cell)
        writer.writerow(cleaned_cells)

2. 读取处理后的文件

用Pandas读取时指定正确的参数:

import pandas as pd
import csv

df = pd.read_csv(
    "cleaned_csv.csv",
    quotechar='"',
    escapechar='\\',
    dtype={"产品编码": str}  # 避免长数字被转成科学计数法
)

方案2:自定义行解析器

如果预处理无法覆盖所有场景,可手动编写解析逻辑识别字段边界:

import pandas as pd

def parse_csv_line(line):
    fields = []
    current_field = []
    in_quote = False
    
    for char in line.strip():
        if char == '"' and not in_quote:
            in_quote = True
        elif char == '"' and in_quote:
            # 判断是否是转义引号
            if current_field and current_field[-1] == '\\':
                current_field.append(char)
            else:
                in_quote = False
        elif char == ',' and not in_quote:
            # 非引号内的逗号作为分隔符
            fields.append(''.join(current_field).strip())
            current_field = []
        else:
            # 处理中文引号
            if char == '“':
                current_field.append('\\"')
            else:
                current_field.append(char)
    # 添加最后一个字段
    fields.append(''.join(current_field).strip())
    return fields

# 读取并解析文件
with open("your_input.csv", 'r', encoding='utf-8') as f:
    header = parse_csv_line(f.readline())
    data_rows = [parse_csv_line(line) for line in f if line.strip()]

df = pd.DataFrame(data_rows, columns=header)

注意事项

  • 替换逻辑需根据实际业务调整,比如中文引号是否代表双引号或单引号
  • 长数字字段(如产品编码)务必指定dtype=str,防止Pandas自动转换为数值类型
  • 大文件建议分块预处理,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:50:22