【问题标题】:How to write multiple dataframes into multiple sheets in a memory and time efficient way in python?python - 如何在python中以内存和时间高效的方式将多个数据帧写入多个工作表?
【发布时间】:2021-12-18 15:27:22
【问题描述】:

我有一个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 文件。

【问题讨论】:

  • 打开每个数据帧的工作簿总是会很慢。
  • @CharlieClark 哦,这意味着我应该在循环之前将所有内容从df.to_excel(...) 移开。和writer.close() 循环后?

标签: python excel pandas openpyxl


【解决方案1】:

在循环之前移动 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()

【讨论】:

  • 这是根据熊猫文档。
猜你喜欢
  • 2020-08-02
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2019-08-23
相关资源
最近更新 更多