pandas报错:'DataFrameGroupBy'对象无to_frame属性
问题说明
使用pandasgroupby函数完成数据分组操作后,尝试将分组结果转换为DataFrame对象时触发报错,读取包含多个工作表的Excel文件不影响该问题触发。
复现代码
dfgrp1 = df['Service 1'].groupby(['Service Type']) dfgrp1 = dfgrp1.to_frame()
报错核心信息
AttributeError: 'DataFrameGroupBy' object has no attribute 'to_frame'
报错原因
groupby()执行后返回的是GroupBy分组对象,该对象仅存储分组规则、分组和原始数据的映射关系,本身不是结构化的表结构,不存在to_frame()方法。- 代码写法存在逻辑问题:单独取出
Service 1列得到的是Series对象,无法按不在该Series内的Service Type字段完成分组。
解决方案
分组操作后必须先执行聚合计算(计数、求和、均值、自定义聚合规则等),聚合后的返回结果为Series或DataFrame类型,如果返回类型是Series,可再调用to_frame()转为DataFrame。
常见场景实现参考:
- 分组后做单维度聚合,转DataFrame
# 按Service Type分组,统计Service 1列的平均值,聚合后转DataFrame并重命名列 dfgrp1 = df.groupby('Service Type')['Service 1'].mean().to_frame(name='Service 1 均值')
- 分组后做多维度聚合,结果直接为DataFrame,无需额外转换
# 按Service Type分组,统计Service 1列的计数、总和、均值 dfgrp1 = df.groupby('Service Type')['Service 1'].agg(['count', 'sum', 'mean'])
- 无聚合需求,仅要分组后的明细数据(非特殊需求不推荐该写法)
dfgrp1 = df.groupby('Service Type', group_keys=False)[['Service Type', 'Service 1']].apply(lambda x: x)
内容的提问来源于stack exchange,提问作者Ashwin Pillai
相关产品推荐
相关产品推荐

