[英]Unexpected 32-bit integer overflow in pandas/numpy int64 (python 3.6)
讓我從示例代碼開始:
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在安裝時會使用它。 在某些情況下,當在64位輸入上調用時, bottleneck.nansum
錯誤地具有32位溢出行為。
我相信這是由於使用PyInt_FromLong
bottleneck
即使long
是32位。 實際上,我不確定為什么甚至會編譯。 有一個關於瓶頸問題跟蹤器的問題報告,尚未修復,以及關於Pandas問題跟蹤器的問題報告,他們試圖彌補瓶頸的問題(但我認為他們在工作時關閉了瓶頸而不是它沒有)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.