pandas pivot_table处理decimal.Decimal类型仅返回两列问题排查
问题原因分析
这个问题是pandas 1.3.0版本的已知缺陷,和value列使用decimal.Decimal数据类型直接相关:
- pandas的
pivot_table方法默认使用mean作为聚合函数,1.3.0版本的内部数值类型校验逻辑存在BUG,无法正确识别decimal.Decimal这类非numpy原生的数值类型,会将这类值判定为无效数据直接过滤,最终导致透视后的apple、banana列全部为空,仅保留索引列。 - 该缺陷在pandas 1.3.1版本更新中已经完成修复,官方优化了非原生数值类型的聚合适配逻辑,因此你升级到1.3.3版本后可以正常得到预期的透视结果。
如果临时无法升级pandas版本,可以用以下两种方法规避问题:
- 显式指定不需要做均值计算的聚合函数,如果你当前场景下每个
date+id+type组合仅对应一条记录,可以指定aggfunc='first':
pivot_df = pd.pivot_table(df, values='value', index=['date', 'id'], columns='type', aggfunc='first').reset_index().rename_axis(None, axis=1)
- 提前将
decimal.Decimal类型的value列转换为float/int等pandas原生支持的数值类型后再执行透视。
内容的提问来源于stack exchange,提问作者wawawa
相关产品推荐
相关产品推荐

