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的最大值int32是2147483647,我怀疑NumPy会考虑type(thr) = <int32>,应该是什么时候<int64>.这有意义吗?
请注意,我没有编写生成的代码,df1因为
ipdb> df1['wght'].count()
137736
Run Code Online (Sandbox Code Playgroud)
但是,如果需要重现错误,请告诉我.
提前致谢.
您遇到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)