Pandas分组报错:'StringDtype'对象无'storage'属性问题咨询
Pandas groupby+mean()遇StringDtype列报AttributeError的解决办法
问题场景
处理大型DataFrame时,执行以下代码:
df.groupby(['id_column'])['weight'].mean()
当id_column为StringDtype类型时,触发错误:
AttributeError: 'StringDtype' object has no attribute 'storage'
但将该列转为float类型,或缩小DataFrame为单日/单ID的子集时,代码可正常运行。当前环境版本:
- Pandas 版本:1.2.5
- 其他依赖版本:1.22.3
问题原因
这是Pandas 1.2.x版本的已知bug:旧版本对StringDtype类型列的groupby聚合逻辑存在兼容性问题,仅在处理大数据量时触发(小数据集会走不同的计算分支,因此不会报错)。
解决方案
1. 临时规避(无需升级)
将StringDtype类型的id_column转为object类型,再执行groupby操作:
# 转换列类型 df['id_column'] = df['id_column'].astype(object) # 执行聚合计算 df.groupby(['id_column'])['weight'].mean()
2. 根本解决(推荐)
升级Pandas到1.3.0及以上版本,该bug在1.3.x版本已被官方修复。执行升级命令:
pip install --upgrade pandas
内容的提问来源于stack exchange,提问作者jjEdge
相关产品推荐
相关产品推荐

