繁体   English   中英

迭代多个Dataframe并在excel xlsxwriter python中写入excel电子表格

[英]Iterate multiple Dataframe and write into excel spreadsheets within an excel xlsxwriter python

我正在excel文件中的excel电子表格中编写多个数据帧。 数据帧使用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()

注意:这里的webclass_id是对象的类型Df_stag:是一个按Webclass_id分组的数据框df是我要写入excel电子表格的数据框另外,每当找到新的Webclass_id时,我都会创建电子表格,因此创建的选项卡是找到时对应的Webclass_id。 一个文件有几个标签, 另一个文件有几个标签

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

只需在for循环外移动writer.save()

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()

对于更短的代码,只需迭代过滤而不需要工作簿对象:

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()

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

请参阅XlsxWriter文档的处理多个Pandas Dataframes部分或此处此处的示例。

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

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

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

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

我只需将对象分配给sheet_name属性,它就会自动将每个dataframe实例复制到工作表名为workbook_Id的excel表中。 即。 df.to_excel(作家,SHEET_NAME = workbook_Id)

@Parfait:早些时候我的代码创建了新的Excel工作表,但它没有复制excel工作表中的dataframe实例。 我只将工作表名称作为Web级别的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(),它也会编写并保存数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM