值错误:合并时不允许使用负尺寸

我将2个数据框合并在一起。它们最初是.csv文件,每个文件只有7兆字节(2列和290,000行)。我像这样合并:

merge=pd.merge(df1,df2, on=['POINTID'], how='outer')

在32位Anaconda中,我得到:

ValueError: negative dimensions are not allowed

但是在64位Anaconda上,出现内存错误。

我有12 GB的RAM,并且只有30%的RAM被使用,因此它不应该是内存问题。我在另一台计算机上尝试过并遇到相同的问题。

回答:

在32位计算机上,默认的NumPy整数dtype为int32。在64位计算机上,默认的NumPy整数dtype为int64

int32int64可以代表的最大整数是:

In [88]: np.iinfo('int32').max

Out[88]: 2147483647

In [87]: np.iinfo('int64').max

Out[87]: 9223372036854775807

因此,由创建的整数索引pd.merge2147483647 = 2**31-1在32位计算机上最多支持9223372036854775807 =

2**63-1行,在64位计算机上最多支持行。

从理论上讲,通过联接合并的两个290000行DataFrameouter可能具有多达290000**2 = 84100000000行。以来

In [89]: 290000**2 > np.iinfo('int32').max

Out[89]: True

32位计算机可能无法生成足以索引合并结果的整数索引。

尽管理论上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

以上是 值错误:合并时不允许使用负尺寸 的全部内容, 来源链接: utcz.com/qa/432961.html

回到顶部