如何将DF2周度数据按月份新增工作表到DF1导出的对应Excel文件
Pandas分月导出多工作表Excel实现方案
错误原因说明
你之前嵌套循环导出出错的核心原因有两个:
- 嵌套循环时没有对df2做当前循环月份的条件筛选,导致全量df2数据被写入每个文件
- 原始代码的
ExcelWriter初始化和save方法位置存在缩进错误,会导致文件覆盖或只写入单条数据
完整实现代码
场景1:一次性生成包含两个工作表的全量Excel文件
适合还未生成df1单独Excel的场景,逻辑更简洁,性能更高:
import pandas as pd # 取两个DataFrame共同的月份交集,避免出现df2没有对应月份的异常 common_months = list(set(df1['month'].unique()) & set(df2['month'].unique())) for month in common_months: # 每个月份初始化一个独立的ExcelWriter对象 output_file = pd.ExcelWriter(f'{month}.xlsx', engine='xlsxwriter') # 写入df1对应月份的Course工作表 df1[df1['month'] == month].to_excel(output_file, sheet_name='Course', index=False) # 写入df2对应月份的周度工作表 df2[df2['month'] == month].to_excel(output_file, sheet_name='Weekly', index=False) # 全部工作表写入完成后再保存文件 output_file.save()
场景2:已有df1导出的Excel文件,仅追加周度工作表
如果已经生成了仅包含Course表的Excel,不需要重新导出df1数据,可以用openpyxl引擎追加写入:
import pandas as pd from openpyxl import load_workbook common_months = df1['month'].unique() for month in common_months: file_path = f'{month}.xlsx' # 匹配当前月份的df2数据 df2_month = df2[df2['month'] == month] # 以追加模式打开已有Excel,重复sheet会自动替换 with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: df2_month.to_excel(writer, sheet_name='Weekly', index=False)
同月份多周分工作表实现
如果需要把同月份的不同周数据拆成独立工作表,只需要在循环内层加周度筛选逻辑即可:
for month in common_months: output_file = pd.ExcelWriter(f'{month}.xlsx', engine='xlsxwriter') df1[df1['month'] == month].to_excel(output_file, sheet_name='Course', index=False) # 筛选当前月份的所有周数据 df2_month = df2[df2['month'] == month] # 按周列拆分写入不同工作表 for week in df2_month['week'].unique(): df2_week = df2_month[df2_month['week'] == week] df2_week.to_excel(output_file, sheet_name=f'Week_{week}', index=False) output_file.save()
内容的提问来源于stack exchange,提问作者M ob
相关产品推荐
相关产品推荐

