pandas/numpy int64(python 3.6)中出现意外的32位整数溢出

Sea*_*mer 9 python numpy integer-overflow python-3.x pandas

让我从示例代码开始:

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())
Run Code Online (Sandbox Code Playgroud)

在我的本地计算机和其他开发人员的计算机上,这可以按预期工作并打印出来:

0       4986289
1     536385600
2    1901657664
Name: nums, dtype: int64
2443029553
Run Code Online (Sandbox Code Playgroud)

但是,在我们的生产服务器上,我们得到:

0       4986289
1     536385600
2    1901657664
Name: nums, dtype: int64
-1851937743
Run Code Online (Sandbox Code Playgroud)

这是32位整数溢出,尽管它是一个int64.

生产服务器使用python,numpy的,熊猫等相同版本这是一个64-bit Windows Server 2012OS,一切报道64位(例如python --version,sys.maxsize,plastform.architecture).

什么可能导致这个?

use*_*ica 6

这是bottleneck库中的一个错误,如果它已安装,Pandas会使用它.在某些情况下,bottleneck.nansum在64位输入上调用时,错误地具有32位溢出行为.

我认为,这是由于bottleneck 使用PyInt_FromLong时,即使long是32位的.实际上,我不确定为什么甚至会编译.有一个关于瓶颈问题跟踪器的问题报告,尚未修复,以及关于Pandas问题跟踪器的问题报告,他们试图弥补瓶颈的问题(但我认为他们在工作时关闭了瓶颈而不是它没有).