[英]Saving multiple dataframes to multiple excel sheets multiple times?
我有一個功能可以將多個數據框作為多個表保存到單個excel工作簿表中:
def multiple_dfs(df_list, sheets, file_name, spaces):
writer = pd.ExcelWriter(file_name,engine='xlsxwriter')
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
如果我多次調用此函數以將多個表寫入多張工作表,則最終只能得到一張工作簿和一張工作表,最后一個被稱為:
multiple_dfs(dfs_gfk, 'GFK', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_top, 'TOP', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_all, 'Total', 'file_of_tables.xlsx', 1)
所以最終我只有file_of_tables
工作簿,只有Total
表格。 我知道這是一個簡單的問題,但是以某種方式,我只是想不出任何優雅的解決方案。 有人可以幫忙嗎?
獲得writer
外函數with
:
def multiple_dfs(df_list, sheets, writer, spaces):
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
with pd.ExcelWriter('file_of_tables.xlsx') as writer:
multiple_dfs(dfs_gfk, 'GFK', writer, 1)
multiple_dfs(dfs_top, 'TOP', writer, 1)
multiple_dfs(dfs_all, 'Total', writer, 1)
從pandas.ExcelWriter
文檔中 :
You can also append to an existing Excel file:
>>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer:
... df.to_excel(writer, sheet_name='Sheet3')
在創建ExcelWriter
類的實例時, mode
關鍵字很重要。
如果沒有文件,則mode='w'
為文件分配空間(一旦調用.save()
或.close()
,文件就會創建),如果已有文件,則覆蓋該文件。
mode='a'
假定存在一個現有文件, 並將其追加到該文件上。 如果要保留代碼的結構,則必須添加如下這樣的小行:
import pandas as pd
import os
def multiple_dfs(df_list, sheets, file_name, spaces):
arg_mode = 'a' if file_name in os.getcwd() else 'w' # line added
writer = pd.ExcelWriter(file_name, engine='xlsxwriter', mode=arg_mode) # added mode argument
row = 0
for dataframe in df_list:
dataframe.to_excel(writer,sheet_name=sheets,startrow=row , startcol=0)
row = row + len(dataframe.index) + spaces + 1
writer.save()
如果然后運行以下代碼系列:
multiple_dfs(dfs_gfk, 'GFK', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_top, 'TOP', 'file_of_tables.xlsx', 1)
multiple_dfs(dfs_all, 'Total', 'file_of_tables.xlsx', 1)
最后一個(和第二個函數調用)不會覆蓋當前寫入其中的數據。 相反,發生的情況是第一個函數調用創建了文件,然后第二個和第三個函數調用追加到了該數據。 現在,您的功能應該可以使用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.