首页 > 解决方案 > python - 如何在python中以内存和时间高效的方式将多个数据帧写入多个工作表?

问题描述

我有一个列表Dataframe,我需要在不同工作表的 excel 文件中写入该列表。目前我正在使用下面的代码 -

dfs = [df1, df2, df3, df4]
sheets = ['sheet1', 'sheet2', 'sheet3', 'sheet4']
df_sheets = zip(dfs, sheets)

for df, sheet_name in df_sheets:
    writer = pd.ExcelWriter('output.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace')
    writer.book = openpyxl.load_workbook('output.xlsx')
    writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
    df.to_excel(writer, sheet_name, index=False)
    writer.close()

现在这需要更多的时间和内存。我试图writer在循环之前和循环writer.close()之后移动启动。但是没有任何东西被写入excel文件。

标签: pythonexcelpandasopenpyxl

解决方案


在循环之前移动writer东西可以让它更快。

dfs = [df1, df2, df3, df4]
sheets = ['sheet1', 'sheet2', 'sheet3', 'sheet4']
df_sheets = zip(dfs, sheets)

writer = pd.ExcelWriter('output.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace')
writer.book = openpyxl.load_workbook('output.xlsx')
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
for df, sheet_name in df_sheets:
    df.to_excel(writer, sheet_name, index=False)

writer.close()

推荐阅读