如何用Pandas循环生成分组DataFrame并导出到同Excel多工作表
实现方法
首先修正你现有代码的笔误:你写的gropuby为拼写错误,正确方法名是groupby,生成分组字典的逻辑可以简化,不需要额外嵌套tuple转换。
自动生成对应命名的独立DataFrame
你已经拿到了按员工分组后的字典,要自动生成和键名同名的可独立访问DataFrame,直接遍历字典动态注入全局变量即可,效果和你手动逐一赋值完全一致:
import pandas as pd # 正确的分组字典生成代码 staff_groups = dict(report.groupby('Staff')) # 遍历分组动态赋值 for staff_name, df in staff_groups.items(): globals()[staff_name] = df
执行完成后,你可以直接输入Bob、Sue这类员工名调用对应DataFrame,不需要手动写赋值语句。
注意:如果员工名存在空格、特殊字符,或是和Python内置函数、你已定义的变量重名,这种方式会出现变量覆盖问题。更稳妥的访问方式还是直接从分组字典取值,比如staff_groups['Bob'],不会污染全局命名空间。
批量导出到同一Excel的独立工作表
借助pandas自带的ExcelWriter即可实现,不需要额外手动维护员工名单,分组有多少个员工就会自动生成多少个工作表:
# 安装依赖:如果未安装openpyxl先执行 pip install openpyxl with pd.ExcelWriter('员工数据拆分结果.xlsx', engine='openpyxl') as writer: # 可选:先写入全量原始数据作为总表方便核对,不需要可以删除这行 report.to_excel(writer, sheet_name='全量总数据', index=False) for staff_name, staff_df in staff_groups.items(): # 替换Excel工作表名不支持的非法字符,同时截断长度到Excel支持的31字符上限,避免导出报错 valid_sheet_name = staff_name.replace('/', '_').replace('\\', '_').replace('*', '_').replace('?', '_').replace('[', '_').replace(']', '_')[:31] staff_df.to_excel(writer, sheet_name=valid_sheet_name, index=False)
代码运行后会在当前脚本所在目录生成员工数据拆分结果.xlsx文件,每个员工的数据会存在对应名称的独立工作表中。如果需要导出为.xls格式,将引擎替换为xlwt即可,注意.xls格式单表最多支持65536行数据,数据量大的场景更推荐使用.xlsx格式。
内容的提问来源于stack exchange,提问作者brandooo23
相关产品推荐
相关产品推荐

