Python 在Pandas中合并两个大型数据帧
当数据大小如此之大时,我应该如何将数据帧Python 在Pandas中合并两个大型数据帧,python,pandas,dataframe,large-data,Python,Pandas,Dataframe,Large Data,当数据大小如此之大时,我应该如何将数据帧df(800万行)中的标签列合并到另一个数据帧df2(1.43亿行) 基本上,我只想将标签列映射到df2,除了标签列之外,df中的所有数据都包含在df2中。我是否可以使用merge()来解决此问题 试图运行下面的代码,但它持续运行了5个小时,但没有响应 result = pd.merge(df,df2,on=["X", "Y", "Z"], how='left') result df df2
df
(800万行)中的标签
列合并到另一个数据帧df2
(1.43亿行)
基本上,我只想将标签
列映射到df2
,除了标签
列之外,df
中的所有数据都包含在df2
中。我是否可以使用merge()
来解决此问题
试图运行下面的代码,但它持续运行了5个小时,但没有响应
result = pd.merge(df,df2,on=["X", "Y", "Z"], how='left')
result
df
df2
我在这里可以看到一些显而易见的事情,您可以做到:
X
/Y
/Z
列和R
/G
/B
的标签是多余的,那么请删除df
的R
/G
/列,因为在最终数据帧中不需要它们,你当然不需要它们被复制1.43亿次
X
/Y
/Z
的唯一值的数量及其数据类型,您可以使用如下分类数据类型来减少内存占用:#转换为分类数据类型(如果每个值都是唯一的,不用麻烦!)
对于[df,df2]中的df_温度:
对于['X','Y','Z']中的列:
df_temp.loc[:,col]=df_temp[col].astype('category')
#使用更少的内存进行合并
结果=pd.merge(df,df2,on=[“X”,“Y”,“Z”],how='left')
X
,并对其进行单独处理,然后连接各个结果以获得最终结果,例如:result\u dfs=[]
范围=[0,1000,2000,3000,4000,…]
对于开始,以zip结尾(范围[:-1],范围[1:]):
df_idx=(df['X']>=start)和(df['X']=start)和(df2['X']
但是,这可能仍然不起作用,因为在执行最终连接时,仍然需要在内存中两次完整的数据集
如果这些都不起作用,恐怕您需要更多内存,或者您需要使用Pandas以外的其他工具来解决您的问题。我认为这是一些数据库的任务,如果需要python dask或其他替代方案。在纯熊猫需要大内存…@jezrael实际上这是点云数据,每行代表一个数据点。你会推荐使用关系数据库/noSQL数据库来处理它吗?不幸的是,我没有经验,所以不能:(@jezrael不用担心,谢谢:)!感谢Chris Cooper先生提供详细的解决方案建议。实际上,这是一个点云数据,每行表示一个数据点。因此,行的每个XYZ都是唯一的值,但是为了保持数据集的完整性,我不能删除RGB列。我想在这种情况下,我不应该指望熊猫能为我做这项工作。。您是否建议我以数据库/其他方式操作数据?在这种情况下,您最好将其加载到数据库中,然后使用SQL进行连接。