问题描述
我正在尝试创建3个不同的数据帧,以在名为df,df_OK,df_KO
的3个单独的工作表中的excel文件中输出。但是,下面的代码仅输出df,并没有创建其他2个数据帧df_OK,df_KO
包含在同一个Excel文件中,但包含在2个单独的工作表中。
有什么建议吗?谢谢
class blah:
def __init__(self,path,file_in,file_out):
self.path = path
self.file_in = file_in
self.file_out = file_out
def process_file(self):
df = pd.read_excel(self.path + self.file_in)
df_OK = df.loc[df['Status'] == 'OK']
df_KO = df.loc[df['Status'] == 'KO']
df_OK.loc['Total'] = df_OK[['Price']].sum(axis=0)
writer = pd.ExcelWriter(self.path + self.file_out,engine='xlsxwriter')
dfs = {
'All': df,'OK': df_OK,'KO': df_KO
}
for sheet_name in dfs.keys():
dfs[sheet_name].to_excel(writer,sheet_name=sheet_name,index=False)
writer.save()
b = blah('C:/Users/......./','path...','file_in....','file_out...')
b.process_file()
解决方法
这是因为您在for sheet_name in dfs.keys()
循环的每次迭代中都覆盖了相同的Excel文件。因此,每次您将只有一张工作表的Excel文件写入相同的文件名,从而覆盖以前的文档。
您应该像这样将writer.save()
移到循环之外:
for sheet_name in dfs.keys():
dfs[sheet_name].to_excel(writer,sheet_name=sheet_name,index=False)
writer.save()