[英]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部分或此处和此处的示例。
如果它不适用于你的情况,那么我猜:
workbook_Id
不是唯一的,您正在覆盖相同的工作表。 workbook_Id == data_id
只有一次真实。 我将从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.