繁体   English   中英

如何将多个 Pandas 数据帧写入 Excel? (当前方法 Corrupts.xlsx)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM