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进行连接。