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