Pandas实现两个表的连接功能的方法详解

 更新时间:2022年09月01日 16:12:03   作者:派森酱  
这篇文章主要和大家一起说说pandas的两个表的连接技能merge,也就是根据一个表的条件去匹配另一个表的内容,感兴趣的可以跟随小编一起学习一下

上次介绍了pandas的多条件筛选,这些都是一些数据处理的必要技能,也不贪多,咱们每次学习一点。

这次咱们说说pandas的两个表的连接技能merge,也就是根据一个表的条件去匹配另一个表的内容。

话不多说,直接正文。

准备数据

先导入模块

import pandas as pd

df1 = pd.DataFrame({
    '姓名': ['张三', '李四', '王五', '刘六', '齐四'],
    '号码': ['123', '456', '789', '987', '654']
})

df2 = pd.DataFrame({
    '姓名': ['张三', '张三', '张三', '李四', '李四', '李四', '李四', '王五', '王五', '刘玉', '胡军', '刘玉', '刘六', '刘六', '刘六', '刘六', '刘克', '刘玉', '齐七', '齐七', '齐七', '齐七', '冯亮', '刘玉', '王云'],

    '号码': ['123', '123', '123', '123', '123', '456', '456', '456', '456', '456', '741', '741', '741', '741', '741', '789', '789', '789', '789', '789', '852', '852', '852', '852', '852'],

    '日期': ['2022-03-13', '2022-03-06', '2022-01-30', '2022-01-04', '2022-02-26', '2022-03-26', '2022-03-06', '2022-01-30', '2022-01-29', '2022-03-13', '2022-03-06', '2022-02-19', '2022-02-04', '2022-03-10', '2022-04-19', '2022-03-10', '2022-01-29', '2022-02-19', '2022-03-06', '2022-03-26', '2022-01-04', '2022-02-04', '2022-04-19', '2022-02-26', '2022-03-06'],

    '方案': ['G1012', 'G1022', 'G1002', 'G1007', 'G1017', 'G1023', 'G1018', 'G1003', 'G1008', 'G1013', 'G1020', 'G1015', 'G1010', 'G1005', 'G1025', 'G1004', 'G1009', 'G1014', 'G1019', 'G1024', 'G1006', 'G1011', 'G1026', 'G1016', 'G1021']
})

输出内容

df1内容

   姓名   号码
0  张三  123
1  李四  456
2  王五  789
3  刘六  987
4  齐四  654

df2内容:

    姓名  号码    日期      方案
0   张三  123  2022-03-13  G1012
1   张三  123  2022-03-06  G1022
2   张三  123  2022-01-30  G1002
3   李四  123  2022-01-04  G1007
4   李四  123  2022-02-26  G1017
5   李四  456  2022-03-26  G1023
6   李四  456  2022-03-06  G1018
7   王五  456  2022-01-30  G1003
8   王五  456  2022-01-29  G1008
9   刘玉  456  2022-03-13  G1013
10  胡军  741  2022-03-06  G1020
11  刘玉  741  2022-02-19  G1015
12  刘六  741  2022-02-04  G1010
13  刘六  741  2022-03-10  G1005
14  刘六  741  2022-04-19  G1025
15  刘六  789  2022-03-10  G1004
16  刘克  789  2022-01-29  G1009
17  刘玉  789  2022-02-19  G1014
18  齐七  789  2022-03-06  G1019
19  齐七  789  2022-03-26  G1024
20  齐七  852  2022-01-04  G1006
21  齐七  852  2022-02-04  G1011
22  冯亮  852  2022-04-19  G1026
23  刘玉  852  2022-02-26  G1016
24  王云  852  2022-03-06  G1021

连接

函数说明:pd.merge(left=df1(需要匹配的原始表), right=df2(被匹配的数据表), on="姓名"(需要匹配的条件列), how="inner"(连接方式))

内连接

how默认为inner:内连接查询特点是df1有匹配的才显示,不匹配的不显示

df = pd.merge(left=df1, right=df2, on="姓名", how="inner")

输出:

    姓名 号码_x 号码_y  日期     方案
0   张三  123  123  2022-03-13  G1012
1   张三  123  123  2022-03-06  G1022
2   张三  123  123  2022-01-30  G1002
3   李四  456  123  2022-01-04  G1007
4   李四  456  123  2022-02-26  G1017
5   李四  456  456  2022-03-26  G1023
6   李四  456  456  2022-03-06  G1018
7   王五  789  456  2022-01-30  G1003
8   王五  789  456  2022-01-29  G1008
9   刘六  987  741  2022-02-04  G1010
10  刘六  987  741  2022-03-10  G1005
11  刘六  987  741  2022-04-19  G1025
12  刘六  987  789  2022-03-10  G1004

df1表里需要匹配的姓名里,在df2里面能匹配上姓名的都会列出来,而匹配不上的,都不会列出来,包括df1里面的内容

小提示:如果两表有相同列名的,会自动在列名后面加_x,_y来区分

外连接

how="outer"为外连接:查询特点是无论匹不匹配都显示,对应的值没有则显示空

df = pd.merge(left=df1, right=df2, on="姓名", how="outer")

输出:

    姓名 号码_x 号码_y   日期     方案
0   张三  123  123  2022-03-13  G1012
1   张三  123  123  2022-03-06  G1022
2   张三  123  123  2022-01-30  G1002
3   李四  456  123  2022-01-04  G1007
4   李四  456  123  2022-02-26  G1017
5   李四  456  456  2022-03-26  G1023
6   李四  456  456  2022-03-06  G1018
7   王五  789  456  2022-01-30  G1003
8   王五  789  456  2022-01-29  G1008
9   刘六  987  741  2022-02-04  G1010
10  刘六  987  741  2022-03-10  G1005
11  刘六  987  741  2022-04-19  G1025
12  刘六  987  789  2022-03-10  G1004
13  齐四  654  NaN         NaN    NaN
14  刘玉  NaN  456  2022-03-13  G1013
15  刘玉  NaN  741  2022-02-19  G1015
16  刘玉  NaN  789  2022-02-19  G1014
17  刘玉  NaN  852  2022-02-26  G1016
18  胡军  NaN  741  2022-03-06  G1020
19  刘克  NaN  789  2022-01-29  G1009
20  齐七  NaN  789  2022-03-06  G1019
21  齐七  NaN  789  2022-03-26  G1024
22  齐七  NaN  852  2022-01-04  G1006
23  齐七  NaN  852  2022-02-04  G1011
24  冯亮  NaN  852  2022-04-19  G1026
25  王云  NaN  852  2022-03-06  G1021

df1表里索引13里的齐四无匹配,是空值,而在df2里面的内容都会列出来,和df1匹配不上的其它列的内容也是空值

注意:这有点互相匹配的意思哟

左连接

how="left"为左连接:查询表示左边的值全部显示,如右边无匹配则显示空。但是右边有的值匹配不了左边则不显示

df = pd.merge(left=df1, right=df2, on="姓名", how="outer")

输出:

    姓名 号码_x 号码_y   日期     方案
0   张三  123  123  2022-03-13  G1012
1   张三  123  123  2022-03-06  G1022
2   张三  123  123  2022-01-30  G1002
3   李四  456  123  2022-01-04  G1007
4   李四  456  123  2022-02-26  G1017
5   李四  456  456  2022-03-26  G1023
6   李四  456  456  2022-03-06  G1018
7   王五  789  456  2022-01-30  G1003
8   王五  789  456  2022-01-29  G1008
9   刘六  987  741  2022-02-04  G1010
10  刘六  987  741  2022-03-10  G1005
11  刘六  987  741  2022-04-19  G1025
12  刘六  987  789  2022-03-10  G1004
13  齐四  654  NaN         NaN    NaN

df1表里索引13里的齐四还是无匹配,是空值,而在df2里面的内容就不会列出来了

右连接

how="right"为右连接:与左连接相反

df = pd.merge(left=df1, right=df2, on="姓名", how="right")

输出:

    姓名 号码_x 号码_y          日期     方案
0   张三  123  123  2022-03-13  G1012
1   张三  123  123  2022-03-06  G1022
2   张三  123  123  2022-01-30  G1002
3   李四  456  123  2022-01-04  G1007
4   李四  456  123  2022-02-26  G1017
5   李四  456  456  2022-03-26  G1023
6   李四  456  456  2022-03-06  G1018
7   王五  789  456  2022-01-30  G1003
8   王五  789  456  2022-01-29  G1008
9   刘玉  NaN  456  2022-03-13  G1013
10  胡军  NaN  741  2022-03-06  G1020
11  刘玉  NaN  741  2022-02-19  G1015
12  刘六  987  741  2022-02-04  G1010
13  刘六  987  741  2022-03-10  G1005
14  刘六  987  741  2022-04-19  G1025
15  刘六  987  789  2022-03-10  G1004
16  刘克  NaN  789  2022-01-29  G1009
17  刘玉  NaN  789  2022-02-19  G1014
18  齐七  NaN  789  2022-03-06  G1019
19  齐七  NaN  789  2022-03-26  G1024
20  齐七  NaN  852  2022-01-04  G1006
21  齐七  NaN  852  2022-02-04  G1011
22  冯亮  NaN  852  2022-04-19  G1026
23  刘玉  NaN  852  2022-02-26  G1016
24  王云  NaN  852  2022-03-06  G1021

右连接正好与左连接相反,df1里面匹配不上的不显示,df2里面的内容全都出来了,匹配不上df1的其它列值则为空值

PS这完全是反向匹配呀

到此这篇关于Pandas实现两个表的连接功能的方法详解的文章就介绍到这了,更多相关Pandas表的连接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python从zip中删除指定后缀文件(推荐)

    python从zip中删除指定后缀文件(推荐)

    这篇文章给大家介绍了python从zip中删除指定后缀文件,然后再自动压缩,本文给大家提供了源码参考,感兴趣的朋友跟随小编一起看看吧
    2019-12-12
  • Django文件上传与下载(FileFlid)

    Django文件上传与下载(FileFlid)

    这篇文章主要为大家详细介绍了Django1.4文件上传与下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Windows上安装tensorflow  详细教程(图文详解)

    Windows上安装tensorflow 详细教程(图文详解)

    这篇文章主要介绍了Windows上安装TENSORFLOW 详细教程,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 一行Python3代码实现解析地址信息

    一行Python3代码实现解析地址信息

    在日常数据处理的过程中,有时候拿到手的是完整的地址信息,如果需要从地址信息中解析出相应的各级行政单元名称,方式有很多,而今天要介绍的方式只需要一行代码即可快速实现,快跟随小编一起学习一下吧
    2022-05-05
  • Python数据分析之Python和Selenium爬取BOSS直聘岗位

    Python数据分析之Python和Selenium爬取BOSS直聘岗位

    今天教各位小伙伴怎么用Python和Selenium爬取BOSS直聘岗位,文中有非常详细的代码示例,对正在学习python爬虫和数据分析的小伙伴有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • python3操作redis实现List列表实例

    python3操作redis实现List列表实例

    本文主要介绍了python3操作redis实现List列表实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • python pygame英雄循环飞行及作业示例

    python pygame英雄循环飞行及作业示例

    这篇文章主要为大家介绍了python pygame英雄循环飞行及作业实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Python常用队列全面详细梳理

    Python常用队列全面详细梳理

    队列是限制在两端进行插入和操作的线性表,允许存入操作的一段叫“队尾”,删除操作的一端叫“队头”,队列的特点:队列只能在队头和队尾进行数据操作,队列模型具有先进先出的规律
    2023-01-01
  • 一篇文章搞懂Python反斜杠的相关问题

    一篇文章搞懂Python反斜杠的相关问题

    这篇文章主要给大家介绍了如何通过一篇文章搞懂Python反斜杠的相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python中list循环语句用法实例

    python中list循环语句用法实例

    这篇文章主要介绍了python中list循环语句用法,以实例形式详细介绍了Python针对list的解析,包含各种常见的遍历操作及原理分析,需要的朋友可以参考下
    2014-11-11

最新评论