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

Pandas读取含引号/逗号的分号分隔CSV及字符替换问题排查

解决分号分隔CSV加载、双引号替换及df.query漏行问题

一、正确加载含特殊字符的分号分隔CSV

你的核心问题是CSV里的未转义双引号干扰了Pandas的列解析,导致整行被识别为单列。直接禁用引号解析功能即可,同时指定Python引擎(C引擎对部分参数支持有限):

import pandas as pd
import csv

df = pd.read_csv(
    "你的文件路径.csv",
    sep=";",
    dtype=str,  # 确保所有列加载为字符串类型
    quoting=csv.QUOTE_NONE,  # 完全禁用引号解析,双引号当作普通字符
    engine="python"
)

这个参数组合会让Pandas忽略双引号的特殊含义,严格按分号拆分列,不会出现整行归为一列的情况。

二、批量替换双引号为两个双引号

用lambda没效果大概率是写法问题,推荐用Series的str.replace方法批量处理,效率更高:

# 对所有字符串列执行替换
df = df.apply(lambda col: col.str.replace('"', '""', regex=False))

regex=False确保只替换普通双引号,不会触发正则解析,避免意外匹配。如果担心非字符串值(虽然你说都是object类型),可以加个类型判断:

df = df.applymap(lambda s: s.replace('"', '""') if isinstance(s, str) else s)

三、解决df.query漏行问题

df.query是通过解析字符串表达式实现的,当目标值含双引号时,会打断表达式的语法结构,导致匹配失败。直接用布尔索引替代df.query即可彻底解决:

# 示例:筛选某列等于目标值的行
target = 'TES"T_ING,_VALUE'
subset = df[df["目标列名"] == target]

布尔索引直接比较原始字符串,不受特殊字符影响,不会漏掉任何符合条件的行。如果一定要用df_query,需要手动转义双引号(用单引号包裹目标值):

subset = df.query('目标列名 == @target')

这里用@引用变量,Pandas会自动处理变量里的特殊字符,避免语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:50:21