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

Python create dataframes from a function using 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 文件只有一个 sheet 到相同的文件名,从而覆盖以前的文件。

您应该像这样将 writer.save() 移到循环之外:

for sheet_name in dfs.keys():
    dfs[sheet_name].to_excel(writer, sheet_name=sheet_name, index=False)
writer.save()