Excel错误可能是pandas写入或大数据引起的?需要建议

Mon*_*nta 2 python xml excel dataframe pandas

我正在读取多个 xml 文件,提取一些数据,然后用我的数据形成 pandas Dataframe。这些是我所做的主要步骤:

  1. 打开一个 xml 文件
  2. 提取一些元素
  3. 使用提取的元素创建一个 pandas 数据框
  4. 将结果附加到名为“output.xlsx”的 excel 文件中(在 python 中使用下面的代码)

对我拥有的所有 xml 文件重复我的步骤(15GB 初始数据,通常包含 100MB 有价值的文本数据)

这是我的 python 代码,用于在输出 excel 文件中附加数据框:

book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
startrow = writer.sheets['Sheet1'].max_row
output.to_excel(writer, startrow=startrow,index = False, header = False)
writer.save()
Run Code Online (Sandbox Code Playgroud)

当我在 Excel 中打开“output.xlsx”时,收到一条提示消息:“我们发现“output.xlsx”中的某些内容存在问题。您希望我们尽力恢复吗?” 是或否的答案

这是 excel 生成的日志文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
<logFileName>error001280_01.xml</logFileName><summary>Errors were detected in 
 file 'D:\JUPYWORKDIR\2009Results\output.xlsx'</summary><repairedRecords> 
<repairedRecord>Repaired Records: String properties from /xl/worksheets/sheet1.xml part
</repairedRecord></repairedRecords></recoveryLog>
Run Code Online (Sandbox Code Playgroud)

我担心将结果保存为 Excel 格式会损坏我的数据,我将来会用 pandas 读取“output.xlsx”以便进行一些数据分析,这个问题会影响我以后的分析吗?我想知道为什么会产生这个问题以及我应该将数据保存为 CSV 吗?有什么建议么?

诗。使用 python 代码检查“output.xlsx”的最后一行,当我在 pandas Dataframe 中导入 excel 文件时,行数相同,最后检查 Microsoft excel 的“恢复文件”的最后一行,我仍然发现相同的行行数,所以我认为这是 Microsoft Excel 由于数据量大而出现的一般错误,但我不确定

小智 11

我也遇到了同样的问题,并花了至少一个小时来搜索修复它,只有 1 个更改,它就得到了修复,而不是使用 writer.save(),而是尝试使用 writer.close() ,它应该可以解决问题。

修改上述代码:

options = {}
options['strings_to_formulas'] = False
options['strings_to_urls'] = False
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl',options=options)
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
startrow = writer.sheets['Sheet1'].max_row
output.to_excel(writer, startrow=startrow,index = False, header = False)
writer.close()
Run Code Online (Sandbox Code Playgroud)