含特殊字符的DataFrame导出CSV时列行错乱的解决方法
解决DataFrame导出CSV列行错乱问题
你的问题出在DataFrame的文本字段里包含了CSV格式的特殊字符(逗号、制表符、引号),直接导出时这些字符会被CSV解析器误判成分隔符,导致列行结构错乱。下面是具体的解决方法:
方法一:用pandas的to_csv配置参数
利用csv模块的引号控制参数,让所有字段被引号包裹,内部特殊字符会被自动转义:
import pandas as pd import csv data = {'col1': [1, 2, 3], 'col2': ['text,\ttabwith,co"mma";', 'text;with;"semi"c|olons', 'text\tw\ith\ttab'], 'col3': ['text,\ttabwith,comma;', 'text;wit|h;semicolons', 9]} df = pd.DataFrame(data) # 所有字段用引号包裹,转义内部引号,不导出索引列 df.to_csv('output.csv', quoting=csv.QUOTE_ALL, escapechar='\\', index=False)
如果只想给非数字字段加引号,可以改用csv.QUOTE_NONNUMERIC:
df.to_csv('output_nonumeric.csv', quoting=csv.QUOTE_NONNUMERIC, escapechar='\\', index=False)
方法二:手动用csv.writer导出
如果需要更自定义的导出逻辑,直接用Python内置的csv.writer处理,效果和上面一致:
import pandas as pd import csv data = {'col1': [1, 2, 3], 'col2': ['text,\ttabwith,co"mma";', 'text;with;"semi"c|olons', 'text\tw\ith\ttab'], 'col3': ['text,\ttabwith,comma;', 'text;wit|h;semicolons', 9]} df = pd.DataFrame(data) with open('manual_output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f, quoting=csv.QUOTE_ALL, escapechar='\\') # 写入表头 writer.writerow(df.columns) # 逐行写入数据 for _, row in df.iterrows(): writer.writerow(row.tolist())
原理说明
quoting=csv.QUOTE_ALL:强制所有字段用双引号包裹,CSV读取器会将引号内的内容视为单个字段,不管里面有逗号、制表符这类分隔符。escapechar='\\':转义字段内部的双引号,避免和包裹字段的引号冲突,防止解析错误。
内容的提问来源于stack exchange,提问作者user21389090
相关产品推荐
相关产品推荐

