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

Pandas to_csv转义不一致:保留\N同时正确转义引号

解决Pandas导出CSV的引号转义与\N保留问题

要同时解决「字段内引号用\转义而非双写」和「\N不被转义为\N」的问题,直接用Python标准库的csv模块自定义写入逻辑即可,无需二次处理大文件,具体实现如下:

核心思路

  1. 关闭Pandas默认的双写引号规则,改用\转义字段内的引号;
  2. 精确控制转义范围:仅转义引号、分隔符和转义符本身,保留\N中的反斜杠;
  3. 通过csv.writer直接写入数据,绕过Pandasto_csv的自动转义逻辑。

代码示例

假设已完成空值替换为\N、字段截断等预处理操作:

import pandas as pd
import csv

# 预处理后的DataFrame
# df = df.fillna(r"\N")
# 字段截断操作...

# 导出配置
output_path = "result.csv"
delimiter = ","  # 替换为你的CSV分隔符

with open(output_path, "w", newline="", encoding="utf-8") as f:
    # 初始化写入器,配置转义和引号规则
    writer = csv.writer(
        f,
        delimiter=delimiter,
        quotechar='"',
        escapechar="\\",
        doublequote=False,
        quoting=csv.QUOTE_NONNUMERIC  # 仅给非数值字段加引号,需全字段加引号则改为csv.QUOTE_ALL
    )
    
    # 写入列名
    writer.writerow(df.columns.tolist())
    
    # 逐行写入数据
    for row in df.itertuples(index=False, name=None):
        row_data = []
        for val in row:
            if pd.isna(val):
                row_data.append(r"\N")
            elif isinstance(val, (int, float)):
                row_data.append(val)  # 保留数值类型,不转字符串
            else:
                row_data.append(str(val))
        writer.writerow(row_data)

参数说明

  • doublequote=False:关闭双写引号的默认行为,改用escapechar转义引号;
  • escapechar="\\":指定用\作为转义字符,仅转义引号、分隔符和\本身;
  • quoting=csv.QUOTE_NONNUMERIC:仅对非数值字段添加引号,避免数值被不必要的引号包裹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:52:13