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

Pandas按列滚动计算np.float64正常 np.float32/16返回空数组问题

问题根因分析
  • 该问题是 pandas 1.2.x版本的滚动窗口校验逻辑与numpy 1.20.1~1.20.3版本的dtype判定规则不兼容导致的bug,根因出在pandas侧的校验逻辑缺陷。
  • 具体触发逻辑:pandas 1.2.x版本处理axis=1的滚动窗口计算时,会先校验计算结果的dtype是否符合预期,校验代码直接用np.result_type的返回值与目标dtype做严格相等比较。numpy 1.20.1版本修复了np.result_type处理float16、float32的计算逻辑,导致np.result_type(np.float32)、np.result_type(np.float16)的返回值无法通过pandas 1.2.x的校验,pandas误判为无有效计算结果,直接返回空DataFrame。
  • 版本适配说明:numpy 1.20.0版本中np.result_type的旧逻辑刚好可以通过pandas 1.2.x的校验,因此降级numpy到1.20.0可以临时解决问题。
修复方案

你可以根据自己的项目环境选择任意一种方案解决该问题:

  1. 升级pandas到1.3.0及以上版本,该版本官方已经修复了滚动窗口的dtype校验缺陷,适配所有numpy兼容版本,float16/float32/float64的滚动计算都可以得到正确结果
  2. 如果不方便升级pandas版本,除了显式指定数据类型为np.float64之外,也可以在调用rolling时添加raw=True参数绕开有问题的校验逻辑,示例代码如下:
print(pd.DataFrame(a, dtype=np.float32).rolling(3, axis=1, raw=True).mean())

运行后即可得到和float64类型一致的正确输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:45:10