为什么pandas创建pivot_table数据透视表时decimal类型无法正常工作?
问题原因
pandas.pivot_table默认使用numpy.mean作为聚合函数,而numpy.mean不支持Python标准库的decimal.Decimal类型,计算时会直接跳过该列。Decimal类型存入DataFrame时,列的dtype会被识别为object类型,pivot_table默认筛选数值类型列作为计算值的规则也会跳过该列,即便手动指定values='C',因为默认聚合函数无法处理该类型,最终返回无有效列的空DataFrame。
解决方案
手动指定支持Decimal类型的聚合函数即可,示例如下:
import pandas import decimal b = pandas.DataFrame({ 'A': ['a', 'b', 'a'], 'B': ['one', 'two', 'three'], 'C': [decimal.Decimal('22.3'), decimal.Decimal('34.0'), decimal.Decimal('12.3')] }) # 指定aggfunc为可处理Decimal类型的函数,比如sum、len或者自定义聚合函数 res = pandas.pivot_table(b, values='C', index='A', columns='B', aggfunc=sum) print(res)
运行后输出结果和使用float类型的示例一致:
B one three two A a 22.3 12.3 NaN b NaN NaN 34.0
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

