让我从示例代码开始:
import numpy
from pandas import DataFrame
a = DataFrame({"nums": [2233, -23160, -43608]})
a.nums = numpy.int64(a.nums)
print(a.nums ** 2)
print((a.nums ** 2).sum())
在我的本地计算机和其他开发人员的计算机上,这按预期工作并打印出来:
0 4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
2443029553
然而,在我们的生产服务器上,我们得到:
0 4986289
1 536385600
2 1901657664
Name: nums, dtype: int64
-1851937743
这是 32 位整数溢出,尽管它是 int64。
生产服务器使用相同版本的 python、numpy、pandas 等。64-bit Windows Server 2012
操作系统和所有内容都报告为 64 位(例如python --version
, sys.maxsize
, plastform.architecture
).
可能是什么原因造成的?
这是一个错误bottleneck
库,如果安装了 Pandas 就会使用该库。在某些情况下,bottleneck.nansum
在 64 位输入上调用时,错误地具有 32 位溢出行为。
我相信这是由于bottleneck
using PyInt_FromLong https://github.com/kwgoodman/bottleneck/blob/master/bottleneck/src/reduce_template.c#L121即使当long
是32位的。实际上,我不确定为什么会编译。有一个问题报告瓶颈问题跟踪器 https://github.com/kwgoodman/bottleneck/issues/163,尚未修复,以及有关的问题报告熊猫问题跟踪器 https://github.com/pandas-dev/pandas/issues/15453,他们试图弥补瓶颈的问题(但我认为他们在瓶颈工作时关闭它,而不是在它不工作时关闭)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)