You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas透视整数DataFrame时出现异常浮点值的问题

为什么pivot_table会输出异常浮点数?我来帮你排查解决

我之前处理pandas透视表的时候也踩过类似的坑,咱们一步步拆解问题根源,再给你对应的解决方案:

核心问题根源

先看你写的代码:

dummy=dummy.pivot_table(index=['hour','new_id'],columns='name', values='values').fillna(0)

这里有两个关键问题直接导致了你看到的异常:

  1. 默认聚合函数是均值,不是求和!
    pandas的pivot_table()默认用mean(均值)作为聚合逻辑,而不是你预期的sum(求和)。如果同一个(hour, new_id, name)组合下有多条记录,计算均值自然会得到浮点数,而且和求和结果偏差极大——比如两条记录值都是5,求和是10,均值是5,这就差了一倍,完全不符合你的预期。

  2. fillna(0)强制转换为浮点类型
    就算你后来改成求和,fillna(0)里的0是浮点型的0.0,会把原本可能是整数的列强制转成浮点类型。这个只是类型问题,不会导致数值偏差,但会让结果都带上.0。

另外还要排查你的原始数据:有没有可能values列表面是整数,但实际已经是浮点型?比如原始数据里存在NaN,pandas会自动把整数列转为浮点列来容纳缺失值,这种情况下哪怕求和也会得到浮点数(比如sum([5.0, 4.0])结果是9.0)。

针对性解决方法

根据你的需求,只需要做几个小调整就能得到预期的整数结果:

方法1:明确指定求和聚合函数,再转回整数

这是最稳妥的方式,不管有没有重复数据都适用:

dummy = dummy.pivot_table(
    index=['hour','new_id'],
    columns='name',
    values='values',
    aggfunc='sum'  # 关键:告诉pandas用求和,不是默认的均值
).fillna(0).astype(int)  # 把浮点型的0.0转成整数0,去掉多余的小数位

方法2:用pivot代替pivot_table(如果无重复数据)

如果你的原始数据中,每个(hour, new_id, name)组合只有唯一一条记录(不需要聚合),可以直接用pivot(),它不需要指定聚合函数,直接完成重塑:

dummy = dummy.pivot(
    index=['hour','new_id'],
    columns='name',
    values='values'
).fillna(0).astype(int)

额外小提示:先处理原始数据类型

如果原始数据的values列因为存在NaN已经是浮点型,可以先预处理转成整数:

# 先填充缺失值为0,再转成整数类型
dummy['values'] = dummy['values'].fillna(0).astype(int)
# 再执行透视操作
dummy = dummy.pivot_table(...)

这样调整后,你就能得到完全符合预期的整数透视结果啦。

内容的提问来源于stack exchange,提问作者sato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:00:52