两个正数的乘法在Python 3中给出了负输出

Miq*_*uel 7 python numpy dataframe pandas

我有一个DataFrame df1:

df1.head() = 

             wght          num_links 
id_y  id_x                      
 3     133   0.000203          2      
       186   0.000203          2 
 5     6     0.000203          2      
       98    0.000203          2      
       184   0.000203          2
Run Code Online (Sandbox Code Playgroud)

我需要计算一个名为的变量thr,

thr = N*(N-1)*2,
Run Code Online (Sandbox Code Playgroud)

哪个N是行数df1.

问题是,当我计算时thr,Python会抛出一个负值(尽管所有输入都是正数):

ipdb> df1['wght'].count()*(df1['wght'].count()-1)*2
-712569744 
Run Code Online (Sandbox Code Playgroud)

可能的暗示

行数N是

ipdb> df1['wght'].count() 
137736 
Run Code Online (Sandbox Code Playgroud)

因此,

ipdb> 137736*137735*2
37942135920.
Run Code Online (Sandbox Code Playgroud)

考虑到可分配给a的最大值int322147483647,我怀疑NumPy会考虑type(thr) = <int32>,应该是什么时候<int64>.这有意义吗?

请注意,我没有编写生成的代码,df1因为

ipdb> df1['wght'].count() 
137736
Run Code Online (Sandbox Code Playgroud)

但是,如果需要重现错误,请告诉我.

提前致谢.

Max*_*axU 7

您遇到np.int32溢出,所以只需使用len(df)而不是df.column.count().

这是一个小型演示:

In [149]: x = pd.DataFrame(np.random.randint(0,100,size=(137736, 3)), columns=list('ABC'))

In [150]: x.A.count() * (x.A.count() - 1) * 2
Out[150]: -712569744

In [151]: len(x) * (len(x) - 1) * 2
Out[151]: 37942135920

In [153]: type(x.A.count())
Out[153]: numpy.int32

In [154]: type(len(x))
Out[154]: int
Run Code Online (Sandbox Code Playgroud)