我有一个数据框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
我需要计算一个名为thr
,
thr = N*(N-1)*2,
where N
是行数df1
.
问题是当我计算时thr
,Python 抛出负值(尽管所有输入都是正值):
ipdb> df1['wght'].count()*(df1['wght'].count()-1)*2
-712569744
可能的提示
行数 N 是
ipdb> df1['wght'].count()
137736
所以,
ipdb> 137736*137735*2
37942135920.
考虑到可以分配给 a 的最大值int32
is 2147483647
,我怀疑 NumPy 认为type(thr) = <int32>
,当它应该是<int64>
。这有道理吗?
请注意,我还没有编写生成的代码df1
because
ipdb> df1['wght'].count()
137736
但是,如果需要重现该错误,请告诉我。
提前致谢。
你正在经历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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)