• Pandas数据集的合并与连接merge()方法_Python数据分析与可视化


    数据集的合并与连接

    merge()解析

    merge()可根据一个或者多个键将不同的DataFrame连接在一起,类似于SQL数据库中的合并操作。

    在这里插入图片描述

    数据连接的类型

    • 一对一的连接:
    df1 = pd.DataFrame({'employee': ['Bob', 'Jake', 'Lisa', 'Sue'], 'group': ['Accounting', 'Engineering', 'Engineering', 'HR']})
    df2 = pd.DataFrame({'employee': ['Lisa', 'Bob', 'Jake', 'Sue'], 'hire_date': [2004, 2008, 2012, 2014]})
    df3 = pd.merge(df1,df2)
    df3
    
    • 1
    • 2
    • 3
    • 4

    输出:
    在这里插入图片描述

    df3
    在这里插入图片描述

    • 多对一的连接:
    df4 = pd.DataFrame({'group': ['Accounting', 'Engineering', 'HR'], 'supervisor': ['Carly', 'Guido', 'Steve']})
    pd.merge(df3,df4) 
    
    • 1
    • 2

    输出:
    在这里插入图片描述

    • 多对多连接:
    df5 = pd.DataFrame({'group': ['Accounting', 'Accounting', 'Engineering', 'Engineering', 'HR', 'HR'], 'skills': ['math', 'spreadsheets', 'coding', 'linux', 'spreadsheets', 'organization']})
    pd.merge(df1,df5)
    
    • 1
    • 2

    输出:
    在这里插入图片描述

    merge()的主要参数

    1. on 可以是列名字符串或者一个包含多列名称的列表;

    pd.merge(df1, df2, on='employee')
    
    • 1

    输出:
    在这里插入图片描述
    这个参数只能在两个DataFrame有共同列名的时候才可以使用。


    2. left_onright_on参数

    有时你也需要合并两个列名不同的数据集,例如前面的员工信息表中有一个字段不是employee而是name。在这种情况下,就可以用left_on和right_on参数来指定列名。

    df3 = pd.DataFrame({'name': ['Bob', 'Jake', 'Lisa', 'Sue'], 'salary': [70000, 80000, 120000, 90000]})
    dfx = pd.merge(df1,df3,left_on="employee",right_on="name")
    
    • 1
    • 2

    输出:
    在这里插入图片描述
    在这里插入图片描述


    drop()删除
    如果出现重复列,但是列名不同时,可以使用drop方法将这列去掉;

    dfx.drop("name",axis=1)
    
    • 1

    输出:
    在这里插入图片描述


    3. left_index与right_index参数 用于合并索引

    df1a = df1.set_index('employee')
    df2a = df2.set_index('employee')
    pd.merge(df1a,df2a,left_index=True,right_index=True)
    
    • 1
    • 2
    • 3

    输出:
    在这里插入图片描述


    join()方法也可以实现该功能:

    df1a.join(df2a)
    
    • 1

    输出:
    在这里插入图片描述


    如果想将索引与列混合使用,那么可以通过结合left_index与 right_on,或者结合left_on与right_index来实现。

    pd.merge(df1a, df3, left_index=True, right_on='name')
    
    • 1

    输出:
    在这里插入图片描述


    4. how参数

    how参数默认情况下是inner,也就是取交集。how参数支持的数据连接方式还有outerleftrightouter表示外连接,取并集。

    df6 = pd.DataFrame({'name': ['Peter', 'Paul', 'Mary'], 'food': ['fish', 'beans', 'bread']}, columns=['name', 'food']) 
    df7 = pd.DataFrame({'name': ['Mary', 'Joseph'], 'drink': ['wine', 'beer']}, columns=['name', 'drink'])
    pd.merge(df6, df7, how='outer') 
    
    • 1
    • 2
    • 3

    输出:
    在这里插入图片描述


    左连接和右连接返回的结果分别只包含左列和右列;

    pd.merge(df6, df7, how='left')
    
    • 1

    输出:
    在这里插入图片描述

    5. suffixes参数

    如果输出结果中有两个重复的列名,因此pd.merge()函数会自动为它们增加后缀 _x 或 _y,当然也可以通过suffixes参数自定义后缀名。

    df8 = pd.DataFrame({'name': ['Bob', 'Jake', 'Lisa', 'Sue'], 'rank': [1, 2, 3, 4]}) 
    df9 = pd.DataFrame({'name': ['Bob', 'Jake', 'Lisa', 'Sue'], 'rank': [3, 1, 4, 2]})
    pd.merge(df8, df9, on="name", suffixes=["_L", "_R"])
    
    • 1
    • 2
    • 3

    输出:
    在这里插入图片描述

    suffixes参数同样适用于任何连接方式,即使有三个及三个以上的重复列名时也同样适用。

  • 相关阅读:
    vue-pdf多页预览异常,Rendering cancelled, page 1 Error at BaseExceptionClosure xxx
    七、克隆虚拟机、常见错误及解决方案
    疫苗预约系统毕业设计,疫苗预约系统设计源码,疫苗预约系统开题报告需求分析
    Vue过度与动画
    springboot+英语在线学习系统 毕业设计-附源码211714
    java计算机毕业设计在线影视系统源程序+mysql+系统+lw文档+远程调试
    程序员可以做哪些副业?我整理的千字副业指南。
    R-Drop: Regularized Dropout for Neural Networks解读
    matlab 计算机载点云的密度
    Linux安装Hadoop超详细教程
  • 原文地址:https://blog.csdn.net/xks18232047575/article/details/134521489