当前位置: 首页 > article >正文

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

数据集的合并与连接

  • merge()解析
  • merge()的主要参数

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

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

df3
在这里插入图片描述

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

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

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

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

merge()的主要参数

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

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

输出:
在这里插入图片描述
这个参数只能在两个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")

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


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

dfx.drop("name",axis=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)

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


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

df1a.join(df2a)

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


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

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

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


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') 

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


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

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

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

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"])

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

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


http://www.kler.cn/news/136314.html

相关文章:

  • JSON.stringify用法
  • VMware Workstation Pro 16 搭建 android-x86过程问题罗列
  • 论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)
  • 《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法
  • CLion远程开发Ubuntu,并显示helloworld文字框
  • redis的配置文件解析
  • Linux网络配置,常用命令及远程工具
  • css旋转代码
  • xlua源码分析(三)C#访问lua的映射
  • Git常用基本指令学习
  • 数据结构 并查集
  • 11.16~11.19绘制图表,导入EXCEL中数据,进行拟合
  • 一道简单的积分题目
  • 【机器学习】036_权重衰退
  • B Label, BL Label 指令
  • 基于安卓android微信小程序美容理发店预约系统app
  • 工具及方法 - 多邻国: Duolingo
  • LeetCode第七题整数反转
  • 什么是一阶逻辑?
  • 数据结构【DS】图的遍历
  • 2311rust,到66版本更新
  • 简单模拟 Spring 创建的动态代理类(解释一种@Transactional事务失效的场景)
  • 使ros1和ros2的bag一直互通
  • Go解析soap数据和修改其中数据
  • MR素数测试及 pycryptodome库下 已知MR伪素数以及强伪证 生成指定伪随机数生成器绕过素性检测
  • 网络工程师-HCIA网课视频学习