【问题标题】:Iterate multiple Dataframe and write into excel spreadsheets within an excel xlsxwriter python迭代多个数据框并在 excel xlsxwriter python 中写入 excel 电子表格
【发布时间】:2017-08-09 02:48:04
【问题描述】:

我正在努力在 excel 文件中的 excel 电子表格中编写多个数据框。 数据框使用 for loop 生成,因此在每次迭代中我都会获得下一个可用的数据框,但我无法在电子表格中写入每个数据框。 我只能在第一个电子表格中编写第一个数据框。 下面是sn-p的代码:

 writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
    workbook = writer.book
    web_ClassID=df_stag["Web-Class ID"].unique()
          for data_id, df in df_stag.groupby('Web-Class ID'): 
             for workbook_Id in web_ClassID:
                 if workbook_Id == data_id:
                    for index, col in enumerate(df):
                    df.to_excel(writer,sheet_name=workbook_Id,index=False )
                    writer.save()
    workbook.close()

注意: 这里的 webclass_id 是对象的类型 df_stag:是一个按 Webclass_id 分组的数据框 df 是我要写入 excel 电子表格的数据框 此外,每当找到新的 Webclass_id 时,我都会创建电子表格,因此在找到时会使用相应的 Webclass_id 创建选项卡。One file having few tabsanother file having few tabs

输出:我想要一个 excel 文件,其中包含所有文件中的所有选项卡以及来自两个文件中具有相同选项卡的那些文件的附加数据。 IE。 11111,22222,33333 和来自 11111 的数据应该来自这两个文件。

【问题讨论】:

  • 我们确实需要样本数据来重现您的问题。什么是 data_id 以及为什么在另一个 for 循环中重新分配它?为什么要增加循环迭代器?再加上你有缩进问题,最后,你的帖子似乎被切断了。请编辑以便我们提供帮助。
  • 抱歉我的缩进问题!! data_id 是数据框中的列之一,它包含可以多次出现的数值。
  • 我想要实现的是按 Web 类 ID 对整个数据帧进行分组,并且无论我在哪里找到 data_id 和 workbook_id 的匹配项,并且由于它多次出现相同的数字,所以应该编写整个数据帧在 Excel 文件中的特定电子表格中。

标签: python excel pandas xlsxwriter


【解决方案1】:

只需将writer.save() 移出for 循环:

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
workbook = writer.book
web_ClassID=df_stag["Web-Class ID"].unique()

for data_id, df in df_stag.groupby('Web-Class ID'):
    for workbook_Id in web_ClassID:
        if workbook_Id == data_id:
            for index, col in enumerate(df):
                df.to_excel(writer,sheet_name=workbook_Id,index=False )
writer.save()
workbook.close()

对于更短的代码,只需迭代过滤即可,无需 workbook 对象:

writer = pd.ExcelWriter('output.xlsx')
for d in df_stag["Web-Class ID"].unique():    
    df_stag[df_stag["Web-Class ID"]==d].to_excel(writer, sheet_name=d, index=False)        

writer.save()

【讨论】:

    【解决方案2】:

    绝对可以使用 XlsxWriter 将多个数据框写入单独的工作表或同一工作表中的不同位置。

    请参阅 XlsxWriter 文档的 Handling multiple Pandas Dataframes 部分或示例 herehere

    如果它不适用于您的情况,那么我猜:

    1. workbook_Id 不是唯一的,您正在覆盖同一个工作表。
    2. workbook_Id == data_id 只存在一次。
    3. 您有一些旧版本的 Pandas 或 XlsxWriter。

    我会从 1. 和 2. 开始,然后放入一些调试语句。

    【讨论】:

    • 感谢您的信息,但我已经尝试过这些逻辑。
    • 我面临的问题是,在 for 循环中,我有一个要写入电子表格的数据框实例,该电子表格的名称应该是 data_id。
    • 我可以复制数据框的标题并生成标签名称为 data_id 的电子表格,但我无法在这些标签中复制数据框。
    【解决方案3】:

    我终于找到了我的问题的答案!

    我只需将对象分配给 sheet_name 属性,它就会自动将数据框的每个实例复制到工作表名称为 workbook_Id 的 Excel 工作表中。 IE。 df.to_excel(writer,sheet_name=workbook_Id)

    【讨论】:

      【解决方案4】:

      @Parfait:之前我的代码是创建新的 Excel 工作表,但它没有在 Excel 工作表中复制数据框的实例。 我只有工作表名称作为 web-class id。

      即使我列举了 df 并尝试在 excel 表中写入 df。它只是写第一个数据帧的内容

      for index, col in enumerate(df):
                      df.to_excel(writer,sheet_name=workbook_Id,index=False )
      writer.save()
      

      将 workbook_id 分配给 sheet_name 不会创建新工作表并分配 sheet_name 内的内容。

      df.to_excel(writer,sheet_name=workbook_Id)
      

      另外,我发现不需要显式编写 writer.save 。即使我们在迭代 to_excel() 之后编写 workbook.close(),它也会写入并保存数据。

      【讨论】:

        猜你喜欢
        • 2021-08-24
        • 2021-04-05
        • 2017-05-18
        • 1970-01-01
        • 2016-03-28
        • 2019-05-28
        • 2011-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多