Python使用ExcelWriter从函数创建数据框

问题描述

我正在尝试创建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()