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