值错误:合并时不允许使用负尺寸
我将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
。
int32
和int64
可以代表的最大整数是:
In [88]: np.iinfo('int32').maxOut[88]: 2147483647
In [87]: np.iinfo('int64').max
Out[87]: 9223372036854775807
因此,由创建的整数索引pd.merge
将2147483647 = 2**31-1
在32位计算机上最多支持9223372036854775807 =
2**63-1行,在64位计算机上最多支持行。
从理论上讲,通过联接合并的两个290000行DataFrameouter
可能具有多达290000**2 = 84100000000
行。以来
In [89]: 290000**2 > np.iinfo('int32').maxOut[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