簡體   English   中英

將多個數據框多次保存到多個Excel工作表?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM