Pandas DataFrame导出CSV文件出现行错乱问题该如何解决?
问题原因
导出CSV行错乱的核心诱因是fulltext列的文本内容包含未转义的换行符(\n、\r、\r\n),CSV格式默认会将这类换行符识别为行分隔符,导致单行数据被强制拆分为多行,最终出现格式错乱。更换分隔符、转换为列表的操作没有触及核心问题,因此无法生效。
修复方案
分两步处理即可解决问题:
- 预处理文本字段,清理或转义内容中的特殊控制字符
可以将换行符替换为空格,避免触发CSV的行拆分规则;如果需要保留换行信息,也可以替换为转义后的\\n,后续读取时再还原。 - 调整
to_csv的导出参数,强制所有字段用引号包裹
开启quoting=csv.QUOTE_ALL参数后,CSV解析器会将引号内的所有内容识别为单个字段,不会处理内部的特殊字符,进一步避免格式错乱。
修正后的完整代码如下:
import os import csv import pandas as pd def __toCSV(dataframe, name): # 预处理fulltext列,清除换行、回车等控制字符 dataframe['fulltext'] = dataframe['fulltext'].str.replace(r'[\n\r\t]', ' ', regex=True) name = name.replace(' ', '_') name = name + '.csv' try: # 新增quoting参数强制包裹所有字段,编码改为utf-8-sig适配Excel打开 return dataframe.to_csv(name, encoding='utf-8-sig', index=False, quoting=csv.QUOTE_ALL) except Exception as e: print(f'The object can\'t be converted into a csv file.\n{e}') finally: if os.path.exists(name): # 修正终端转义符,避免后续输出一直处于加粗状态 print('\033[1m'+ '{} is succesfully created.'.format(name)+'\033[0m' )
后续读取该CSV时,同步添加quoting=csv.QUOTE_ALL参数即可正确还原数据。
内容的提问来源于stack exchange,提问作者Edfern
相关产品推荐
相关产品推荐

