python 使用for循环在同一工作簿中写入多个工作表

nr9pn0ug  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(321)

场景:
1.读取包含多个工作表的excel文件
1.对于输入的每个工作表,读取几个特定的列并操作现有数据
1.创建输出 Dataframe
1.将此 Dataframe 作为新工作表保存在现有输出文件中
下面是我的代码片段:

for sheet in all_sheets: # all_sheets is the list of sheets from the input file
    print(sheet) # Here i transform the data but removed the 
    writer = pd.ExcelWriter('Output.xlsx', engine='xlsxwriter')
    df_final_4.to_excel(writer, sheet_name=sheet, index=True)
    writer.save()

问题陈述:
1.该文件仅使用一个工作表写入,该工作表包含最后一次迭代的数据。
1.上一个小版本将被覆盖,输出文件中仅保留一个页面。
1.我试过多种方法,但每种方法都得到了同样的结果。
有谁能告诉我我错在哪里吗?
其他方法:
x一个一个一个一个x一个一个二个一个x一个一个三个一个

km0tfn4u

km0tfn4u1#

我可以通过更改代码的顺序来解决这个问题:

writer = ExcelWriter('Output.xlsx')
for sheet in all_sheets:
    <do calculations>
    <do manipulations>
    <do slicing>
    
    df.to_excel(writer, sheet_name=sheet)
writer.save()

这基本上是因为我们希望在同一个文件中写入多个工作表,因此编写器的初始化或定义应该只完成一次。
但是,如果只需要写入一个工作表,则可以在循环内的任何位置定义写入器。

ocebsuys

ocebsuys2#

我设法解决这个使用字典。创建一个字典与基本键和下面的代码hellped:

df_dict = {}
for i in range(len(df)):
    df_dict[i] =  df[i]
writer = pd.ExcelWriter(path,engine = 'xlsxwriter')

for name,value in df_dict.items():
    value.to_excel(writer,sheet_name = 'x'+str(name))
    print("sheet {} written".format(name))

writer.save()

这创建了具有多个 Dataframe 的新表。

相关问题