[英]How to Write Multiple Pandas Dataframes to Excel? (Current Method Corrupts .xlsx)
我正在尝试将两个 Pandas 数据帧写入同一工作簿中的两个不同工作表。
我正在使用 openpyxl 3.0.7 和 Pandas 1.2.3。
我的工作簿的名称是“test.xlsx”,里面有两个选项卡:“Tab1”和“Tab2”。
这是我正在使用的代码:
import pandas as pd
from openpyxl import load_workbook
def export(df1, df2):
excelBook = load_workbook('test.xlsx')
with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
writer.book = excelBook
writer.sheets = dict((ws.title, ws) for ws in excelBook.worksheets)
df1.to_excel(writer, sheet_name = 'Tab1', index = False)
df2.to_excel(writer, sheet_name = 'Tab2', index = False)
writer.save()
df1 = pd.DataFrame(data = [1,2,3], columns = ['Numbers1'])
df2 = pd.DataFrame(data = [4,5,6], columns = ['Numbers2'])
export(df1, df2)
运行上述代码时,它执行没有错误。 但是,当我 go 打开 Excel 中的 test.xlsx 时,我收到一条警告,告诉我:“我们发现 'test.xlsx' 中的某些内容有问题。您希望我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击是。”
当我单击“是”时,Excel 修复了该问题,并且我的两个数据框被填充在其正确的选项卡上。 然后我可以将文件另存为新文件名,并且文件不再损坏。
任何帮助深表感谢!
尝试使用一个引擎一次打开/写入:
import pandas as pd
def export(df1, df2):
with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name = 'Tab1', index = False)
df2.to_excel(writer, sheet_name = 'Tab2', index = False)
writer.save()
这个问题的解决方案是从脚本中删除 writer.save()。 在 Pandas 版本 1.1.5 及更早版本中,使用此 writer.save() 不会导致文件损坏。 但是,在 1.2.0 及更高版本中,这确实会导致文件损坏。 调用 pd.ExcelWriter 后,官方 pandas 文档未显示使用 writer.save。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.