在32位计算机上,默认的NumPy整数dtype为
int32。在64位计算机上,默认的NumPy整数dtype为
int64。
int32和
int64可以代表的最大整数是:
In [88]: np.iinfo('int32').maxOut[88]: 2147483647In [87]: np.iinfo('int64').maxOut[87]: 9223372036854775807因此,由创建的整数索引
pd.merge将
2147483647 = 2**31-1在32位计算机上最多支持
9223372036854775807 =2**63-1行,在64位计算机上最多支持行。
从理论上讲,通过联接合并的两个290000行Dataframe
outer可能具有多达
290000**2 = 84100000000行。以来
In [89]: 290000**2 > np.iinfo('int32').maxOut[89]: True32位计算机可能无法生成足以索引合并结果的整数索引。
尽管理论上64位计算机可以生成足以容纳结果的整数索引,但您可能没有足够的内存来构建一个840亿行的Dataframe。
现在,当然,合并的Dataframe可能少于840亿行(确切的行数取决于中
df1['POINTID']和中
出现多少个重复值
df2['POINTID']),但是以上的信封计算表明,您看到的行为与具有很多重复。
PS。如果存在算术溢出,则在NumPy数组中添加或乘以正整数时,您可以得到负值:
In [92]: np.int32(290000)*np.int32(290000)Out[92]: -1799345920
我的猜测是这是导致异常的原因:
ValueError: negative dimensions are not allowed



