Pandas DataFrame.to_csv字段含逗号导致列错位问题的解决方法
问题根因
列错位不是pandas导出逻辑出错,是分隔符不匹配导致的:
- 你在
to_csv()里手动指定了sep='\t',也就是用制表符作为列分隔符 - 你双击打开CSV时,系统默认调用的打开工具(比如Excel)默认按逗号识别列分隔符,完全没有按你设置的制表符规则拆分,自然会把字段值里自带的逗号当成分隔符,造成列偏移。
修复方法
根据你的使用场景选对应方案即可:
方案1:用CSV标准默认配置(最推荐)
去掉自定义的sep参数,用pandas默认的逗号作为分隔符即可。pandas默认遵循CSV规范,会自动给包含逗号、换行、引号等特殊字符的字段外层包裹双引号,所有符合标准的CSV读取工具都能正确识别带特殊字符的字段,不会错位。
同时建议加上index=False参数,避免pandas把无意义的行索引单独导出成一列,额外造成列错位。
修正后的代码:
import pandas as pd datalist = {'Owner/Occupant': ["andrew"], 'Job Address': ["test, newyork"], 'Buyer': ["andrew"], 'Phone': ["12312341234"]} data_list = pd.DataFrame(datalist) data_list.to_csv('test.csv', index=False)
方案2:保留制表符分隔,打开时手动指定分隔规则
如果你导出的文件是给其他依赖制表符分隔的程序使用,不需要改导出代码,只需要在打开文件时,不要直接双击打开,走对应工具的文本导入流程,手动指定分隔符为制表符,即可正常加载所有列,不会出现错位。
方案3:强制全字段加引号兼容
如果需要兼容默认双击打开的场景,又担心各种特殊字符导致拆分异常,可以显式配置引用规则,强制给所有字段值外层包裹双引号,避免分隔符识别错误,代码如下:
import pandas as pd import csv datalist = {'Owner/Occupant': ["andrew"], 'Job Address': ["test, newyork"], 'Buyer': ["andrew"], 'Phone': ["12312341234"]} data_list = pd.DataFrame(datalist) data_list.to_csv('test.csv', index=False, quoting=csv.QUOTE_ALL)
内容的提问来源于stack exchange,提问作者wookidookik123
相关产品推荐
相关产品推荐

