使用 Pandas 写入时文件损坏

Posted

技术标签:

【中文标题】使用 Pandas 写入时文件损坏【英文标题】:File corruption while writing using Pandas 【发布时间】:2019-06-03 06:51:25 【问题描述】:

我正在从一个完全有效的xlsx 文件中读取数据,并在 Python 3.5 中使用 Pandas 对其进行处理。最后,我正在使用以下方法将最终数据框写入 Excel 文件:

writer = pd.ExcelWriter(os.path.join(DATA_DIR, 'Data.xlsx'), 
engine='xlsxwriter', options='strings_to_urls': False)
manual_labelling_data.to_excel(writer, 'Sheet_A', index=False)
writer.save()

在尝试打开Data.xlsx 时,我收到错误消息:我们发现“Data.xlsx”中的某些内容存在问题...继续将文件加载到 Excel 中并显示信息:已删除记录:来自 /xl/worksheets/sheet1.xml 部分的公式

我无法找出问题所在。

【问题讨论】:

当您尝试使用 Pandas 打开 Excel 文件时会发生什么?如果将文件写入 CSV,然后尝试打开 CSV,会发生什么情况? 写入 CSV 没有问题。使用 Pandas 读取写入的 xlsx 文件也没有任何问题。 您实际上是在从数据框中编写公式吗?如果是这样,那么您应该尝试隔离造成问题的公式。如果不是,并且公式被无意解释,那么您可以通过将 strings_to_formulas 构造函数选项设置为 False 来避免这种情况。 @jmcnamara,这有帮助。万分感谢。另外,能否请您提供包含所有可用选项列表的链接。 @Aroonalok 可用选项列在XlsxWriter constructor 文档下。 【参考方案1】:

非常感谢@jmcnamara 在评论中的帮助。问题是数据中的某些字符串被错误地解释为公式。更正后的代码是:

options = 
options['strings_to_formulas'] = False
options['strings_to_urls'] = False
writer = pd.ExcelWriter(os.path.join(DATA_DIR, 'Data.xlsx'),engine='xlsxwriter',options=options)
manual_labelling_data.to_excel(writer, 'Sheet_A', index=False)
writer.save()

【讨论】:

非常方便,我有一列包含 base64 编码字符串,一行以 = 开头,禁用 string_to_formulas 节省了我的一天!谢谢分享。

以上是关于使用 Pandas 写入时文件损坏的主要内容,如果未能解决你的问题,请参考以下文章

下载文件,winsock recv() 到 fstream 写入,文件损坏

Java AsyncHttpClient:从 LazyResponseBodyPart 写入 AsynchronousFileChannel 时文件损坏

删除由 spark-structured-streaming 写入的损坏的 parquet 文件时,我会丢失数据吗?

将数百万次写入文件会损坏我的硬盘吗?

Pandas ExcelWriter Openpyxl 正在创建一个必须恢复的损坏文件

U盘删除文件时提示“文件或目录损坏且无法读取”的解决方法