簡體   English   中英

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

[英]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 --versionsys.maxsizeplastform.architecture )。

什么可能導致這個?

這是bottleneck庫中的一個錯誤,Pandas在安裝時會使用它。 在某些情況下,當在64位輸入上調用時, bottleneck.nansum錯誤地具有32位溢出行為。

我相信這是由於使用PyInt_FromLong bottleneck即使long是32位。 實際上,我不確定為什么甚至會編譯。 有一個關於瓶頸問題跟蹤器的問題報告,尚未修復,以及關於Pandas問題跟蹤器的問題報告,他們試圖彌補瓶頸的問題(但我認為他們在工作時關閉了瓶頸而不是它沒有)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM