使用Pandas循环处理DataFrame生成带间隔行的Excel多报表
批量生成分组Excel报表解决方案
问题描述
需将大型DataFrame按唯一id分组,每个分组生成一份匹配指定模板的报表,报表之间用空行分隔。希望通过循环实现,避免编写大量硬编码的元素映射代码。
原代码
import pandas as pd data = {'id': [1,2,3] , 'make': ['ford','chevrolet','dodge'] , 'model': ['mustang','comaro','challenger'] , 'year': ['1969','1970','1971'] , 'color': ['blue', 'red', 'green'] , 'miles': ['15000','20000','35000'] , 'seats': ['leather', 'cloth' , 'leather'] } df = pd.DataFrame(data) df.to_excel(r'/desktop/reports/output1.xlsx')
期望输出格式
每个id对应两行报表数据,分组间空一行分隔:
A B C D E F 1 make ford year 1969 miles 15000 2 model mustang color blue seats leather 3 4 make chevrolet year 1970 miles 20000 5 model comaro color red seats cloth 6 7 make dodge year 1971 miles 35000 8 model challenger color green seats leather
解决方案代码
使用openpyxl直接操作Excel工作表,通过循环遍历每个分组,动态构造报表行并写入,自动添加分隔空行:
import pandas as pd from openpyxl import Workbook data = {'id': [1,2,3] , 'make': ['ford','chevrolet','dodge'] , 'model': ['mustang','comaro','challenger'] , 'year': ['1969','1970','1971'] , 'color': ['blue', 'red', 'green'] , 'miles': ['15000','20000','35000'] , 'seats': ['leather', 'cloth' , 'leather'] } df = pd.DataFrame(data) # 初始化Excel工作簿和工作表 wb = Workbook() ws = wb.active current_row = 1 # 遍历每个数据行(按id分组) for _, row in df.iterrows(): # 写入第一行报表数据 ws.append(['make', row['make'], 'year', row['year'], 'miles', row['miles']]) # 写入第二行报表数据 ws.append(['model', row['model'], 'color', row['color'], 'seats', row['seats']]) # 最后一个分组不添加空行 if current_row < len(df) * 2: ws.append([]) current_row += 3 # 保存格式化后的Excel文件 wb.save(r'/desktop/reports/output_formatted.xlsx')
代码说明
- 采用
openpyxl替代pandas默认的to_excel方法,实现对Excel行的精细化控制 - 通过
df.iterrows()循环遍历每一条数据,动态生成匹配模板的两行报表内容 - 每个分组报表后自动添加空行分隔,最后一个分组跳过空行避免冗余
- 所有数据映射通过DataFrame列名动态获取,无需编写大量硬编码的位置映射代码
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

