如何用Pandas写入含特殊字符文本列的CSV以保持原结构?
解决Pandas写入CSV时列错乱的问题
要让写入的CSV保持原文件格式,你需要在pd.to_csv中添加以下关键参数:
escapechar='\\':与读取时一致,用反斜杠转义分隔符quoting=csv.QUOTE_NONE:禁用字段引用,避免Pandas自动给含特殊字符的字段加引号(这是导致列错乱的核心原因)sep=',':显式指定分隔符(与默认一致,确保和原文件匹配)
原因说明
你读取文件时用escapechar='\\',意味着原文件通过反斜杠转义逗号等分隔符,而非用引号包裹字段。但pd.to_csv默认会给含分隔符的字段加引号,这会导致后续读取或打开文件时,工具无法正确识别字段边界,进而造成列错乱。通过设置quoting=csv.QUOTE_NONE,Pandas会转而使用指定的escapechar转义分隔符,完全匹配原文件的格式逻辑。
修正后的代码
首先需要导入csv模块,然后修改两个to_csv调用:
import csv import pandas as pd reader = pd.read_csv(local_file_path, nrows=None, chunksize=10000, escapechar='\\') output_path = f'/home/achilleslaststand/Desktop/clean_data/{report}_cleaned.csv' j = 0 for chunk in reader: # 数据清洗逻辑保持不变 for column in chunk.columns: if column in median_values and column in max_tresholds: mask = chunk[column] > max_tresholds[column] chunk.loc[mask, column] = median_values[column] # 写入时添加关键参数 if j == 0: chunk.to_csv( output_path, mode='a', header=True, index=False, escapechar='\\', quoting=csv.QUOTE_NONE, sep=',' ) else: chunk.to_csv( output_path, mode='a', header=False, index=False, escapechar='\\', quoting=csv.QUOTE_NONE, sep=',' ) j += 1
额外注意事项
如果原文件同时使用了引号和转义符,可以根据实际情况调整quoting参数(比如csv.QUOTE_MINIMAL或csv.QUOTE_ALL),但根据你的描述,csv.QUOTE_NONE是最匹配原格式的选择。
内容的提问来源于stack exchange,提问作者Fotis Kyriakidis
相关产品推荐
相关产品推荐

