Python 熊猫:合并数组太大了,太大了,怎么合并?

Python 熊猫:合并数组太大了,太大了,怎么合并?,python,pandas,Python,Pandas,当尝试使用pandas合并两个数据帧时,我收到这样一条消息:“ValueError:array太大了。”我估计合并后的表将有大约50亿行,这对于我的8GB RAM的计算机来说可能太多了(这仅仅是受我的RAM限制还是内置在pandas系统中?) 我知道,一旦合并了表,我将计算一个新列,然后过滤行,在组中查找最大值。因此,最终的输出表将只有250万行 如何解决这个问题,以便在较小的部分上执行此合并方法并建立输出表,而不受RAM限制 以下方法适用于此小数据,但对较大的真实数据无效: import pa

当尝试使用pandas合并两个数据帧时,我收到这样一条消息:“ValueError:array太大了。”我估计合并后的表将有大约50亿行,这对于我的8GB RAM的计算机来说可能太多了(这仅仅是受我的RAM限制还是内置在pandas系统中?)

我知道,一旦合并了表,我将计算一个新列,然后过滤行,在组中查找最大值。因此,最终的输出表将只有250万行

如何解决这个问题,以便在较小的部分上执行此合并方法并建立输出表,而不受RAM限制

以下方法适用于此小数据,但对较大的真实数据无效:

import pandas as pd
import numpy as np

# Create input tables
t1 = {'scenario':[0,0,1,1],
      'letter':['a','b']*2,
      'number1':[10,50,20,30]}

t2 = {'letter':['a','a','b','b'],
      'number2':[2,5,4,7]}

table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)

# Merge the two, create the new column. This causes "...array is too big."
table3 = pd.merge(table1,table2,on='letter')
table3['calc'] = table3['number1']*table3['number2']

# Filter, bringing back the rows where 'calc' is maximum per scenario+letter
table3 = table3.loc[table3.groupby(['scenario','letter'])['calc'].idxmax()]
这是前两个问题的后续问题:


我在下面回答我自己的问题。

您可以使用groupby分解第一个表(例如,在“场景”中)。首先创建一个新的变量,它可以为您提供所需大小的组。然后对每个表执行以下操作:执行新的合并、筛选,然后将较小的数据附加到最终的输出表中

正如“ItErrors是否存在性能问题?”中所解释的,迭代速度很慢。因此,尽量使用大组,以尽可能使用最有效的方法来保持它。熊猫是一种融合的动物

在创建输入表之后,继续

table3 = pd.DataFrame()

grouped = table1.groupby('scenario')

for _, group in grouped: 
    temp = pd.merge(group,table2, on='letter')
    temp['calc']=temp['number1']*temp['number2']
    table3 = table3.append(temp.loc[temp.groupby('letter')['calc'].idxmax()])
    del temp

我试图通过在每次迭代中删除temp来提高内存效率。这是否增加了价值?我希望避免创建保留在内存中的对象。append()是正确的选择吗?我很想听听这个“太大而无法合并”问题的其他解决方案,谢谢。