如何筛选DataFrame并生成含多个工作表的多个Excel文件
问题原因
- 你将
pd.ExcelWriter()的初始化逻辑放在了内层product循环中,每遍历一个产品,就会重新生成一个同名的Excel文件,直接覆盖上一轮循环生成的文件 - 每一轮新的
ExcelWriter实例仅会写入当前循环对应的单个工作表,之前写入的内容随文件覆盖被清空,因此最终文件里只会保留最后一次循环处理的工作表
解决方法
将ExcelWriter的初始化逻辑移到外层district循环内、product循环外,保证每个地区仅创建一次Excel文件,遍历所有产品时往同一个文件内追加不同工作表即可。
修正后代码示例
for file in district: # 每个地区对应一个Excel文件,仅初始化一次写入对象 output_path = folder + "//Output//" + file + "_{}.xlsx".format(datetime.now().strftime("%Y%m%d")) with pd.ExcelWriter(output_path) as xlWriter: for prd in product: df_district = df[df["SalesDistrict"].isin([file]) & df["ProductSold"].isin([prd])].copy() df_district.to_excel(xlWriter, index_label="SalesDate", sheet_name=prd)
补充说明:
- 如果筛选条件为单个值,也可以将
isin([xxx])替换为== xxx,运行效果一致- 如果运行报错提示
datetime未定义,请在代码开头添加导入语句from datetime import datetime
内容的提问来源于stack exchange,提问作者Dennis Kwone
相关产品推荐
相关产品推荐

