【问题标题】:Create Excel Tables from Dictionary of Dataframes从数据框字典创建 Excel 表
【发布时间】:2020-12-23 04:10:39
【问题描述】:

我有数据框字典。

dd = {
'table': pd.DataFrame({'Name':['Banana'], 'color':['Yellow'], 'type':'Fruit'}),
'another_table':pd.DataFrame({'city':['Atlanta'],'state':['Georgia'], 'Country':['United States']}),
'and_another_table':pd.DataFrame({'firstname':['John'], 'middlename':['Patrick'], 'lastnme':['Snow']}),
     }

我想创建一个 Excel 文件,其中包含从这些数据框创建的 Excel 表格对象。每个表格都需要位于单独的选项卡/工作表上,并且表格名称应与数据框名称匹配。

这可能与 Python 相关吗?

到目前为止,我只能正常将数据导出到 Excel,而无需使用 xlsxwriter 转换为表格

writer = pd.ExcelWriter('Results.xlsx', engine='xlsxwriter')

for sheet, frame in  dd.items():
    frame.to_excel(writer, sheet_name = sheet)

writer.save()

【问题讨论】:

  • 每个数据帧是否覆盖之前的数据?
  • 每个数据框都需要位于单独的选项卡/工作表上
  • 除了像this question那样在不同的工作表上分开之外,标记为重复的那个显示了如何使用openpyxl在excel中创建表格对象
  • 遵循这些答案的建议,如果您卡在一个非常具体的行中,您可以搜索它或添加一个新问题。 Bozho 有a good blog post 用于在发布问题之前自行调试。

标签: python dictionary openpyxl export-to-excel xlsxwriter


【解决方案1】:

要从 Pandas 编写多张工作表,请使用 openpyxl 库。此外,为防止覆盖,请在每次更新前设置工作簿表。

试试这个代码:

import pandas as pd
import openpyxl

dd = {
'table': pd.DataFrame({'Name':['Banana'], 'color':['Yellow'], 'type':'Fruit'}),
'another_table':pd.DataFrame({'city':['Atlanta'],'state':['Georgia'], 'Country':['United States']}),
'and_another_table':pd.DataFrame({'firstname':['John'], 'middlename':['Patrick'], 'lastnme':['Snow']}),
}

filename = 'Results.xlsx'  # must exist

wb = openpyxl.load_workbook(filename)

writer = pd.ExcelWriter(filename, engine='openpyxl')

for sheet, frame in  dd.items():
    writer.sheets = dict((ws.title, ws) for ws in wb.worksheets) # need this to prevent overwrite
    frame.to_excel(writer, index=False, sheet_name = sheet)

writer.save()

# convert data to tables
wb = openpyxl.load_workbook(filename)
for ws in wb.worksheets:
   mxrow = ws.max_row
   mxcol = ws.max_column
   tab = openpyxl.worksheet.table.Table(displayName=ws.title, ref="A1:" + ws.cell(mxrow,mxcol).coordinate)
   ws.add_table(tab)

wb.save(filename)

输出

【讨论】:

  • 感谢您提交。但我希望将这些数据框添加为 Excel 表格对象。在您的方法中,您已经描述了将它们添加为常规数据。
  • 正是我想要的。解决方案按预期工作。谢谢!
猜你喜欢
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多