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

我正在写excel文件中的Excel电子表格中的多个数据框。 dataframe使用for循环生成,所以在每次迭代中我都会得到下一个可用的dataframe,但是我无法在电子表格中写入每个dataframe。 我只能在第一个电子表格中写入第一个dataframe。 以下是代码片段:

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是对象的typesDf_stag:是一个按Webclass_id分组的数据框df是我想要写入Excel电子表格的数据框另外,无论何时find一个新的Webclass_id,我都会创build电子表格,find对应的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数据框”部分或这里和这里的示例。

如果它不在你的情况下,那么我猜测:

  1. workbook_Id不是唯一的,而是覆盖相同的工作表。
  2. workbook_Id == data_id只有一次。
  3. 你有pandas或XlsxWriter的旧版本。

我将从1和2开始,并放入一些debugging语句。

我终于find了我的问题的答案!

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

@Parfait:早些时候我的代码是创build新的Excel表,但它不是在Excel表中复制数据框的实例。 我只有表格名称作为网页类的ID。

即使我列举了DF,并尝试在Excel表格中写入DF。 它只是写第一个dataframe的内容

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

将workbook_id分配给sheet_name将不会创build新工作表并在sheet_name中分配内容。

 df.to_excel(writer,sheet_name=workbook_Id) 

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