merge 操作|学习笔记

简介: 快速学习 merge 操作

开发者学堂课程【Python 常用数据科学库:merge 操作】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/546/detail/7484


merge 操作

内容介绍

一、merge 函数基本操作

二、总结


一、merge 函数基本操作

1、基本合并。

在 pandas 当中,有一个非常重要的函数叫 merge 操作,这个操作跟数据库操作比较相关,但其实在 pandas 当中有很多功能都是跟数据库相关的,因为都要去操纵数据。首先把 pandas 导进来,先做两份数据

import pandas as  pd

left = pd.DataFrame({'key':['K0' K1'.K2',‘K3'],

'A':['A0','A1' A2' A3'].

'B':['B0', 'B1', 'B2' ,'B3']})

right = pd.DataFrame({'key':[' K0'. 'K1' ,'K2' K3'],

'C':['C0','C1'.,'C2','C3'],

'D':['D0’,'D1’,'D2','D3']})

 image.png

image.png

然后把这两个表进行合并,可以直接 merge,把左表和右表传进来,这两个就相当于需要的两个参数,默认情况下它会让指定left等于什么,right 等于什么,相当于两个表之间进行合并,不写前面的参数也可以,前两个参数就是左表和右表都给传进去

pd.merge( left,right)

这就完成了,然后看结果。

image.png

但是当前的结果,只有一个 key,这样就完成了一个最基本操作。然后它也会默认按什么进行合并,左表和右表有相同的,就合并在一起了,这个是直接的写法。

2、参数 on。on 的意思就是你要以什么为键进行合并,一般情况下需要自己给它指定,以 key 为键进行合并

pd.merge (left,right,on='key')

还是这个结果,只不过是写法更完善了一些。左表右表索引或者一些关键的指标可能是一样的,通过这个指标来进行合并,这个就是 merge 最基本的一个方法。

如果现在问题变了,有两个 key,在合并的时候就需要一些其他的策略。

left = pd.DataFrame({'key1':['K0' K1'.K2',‘ K3'],

'key2':['K0' K1'.K2',‘ K3']

'A':['A0','A1' A2' A3'].

'B':['B0', 'B1', 'B2' ,'B3']})

right = pd.DataFrame({'key1':[' K0'. 'K1' ,'K2' K3'],

'key1':[' K0'. 'K1' ,'K2' K3'],

'C':['C0','C1'.,'C2','C3'],

'D':['D0’,'D1’,'D2','D3']})

 image.png        

image.png

结果没有什么变化,就是多了两列,然后就可以执行 merge 操作,on 的时候可以指定,比如说 on key1

pd.merge(left, right, on='key1')

出现这样一个结果

image.png

key1只有一个,还有 key2_x和 key_y 这就是说现在是以 key1为键进行合并的, key2虽然名字相同了,但是认为它是不同的东西,所以有 key2_x和 key_y。这就是说,如果以其中一个 key 为键,但另外一个如果是相同的,后面会多出来一个后缀。以后用到的数据如果出现 _x,_y,基本上就是合并的时候它有重复的关键字,但是它不是键,这样造成的。

同时以 key1,key2为键,执行一下,这回只有一个 key1和 key2,ABCD 都拿出来了,

把 right 中 key2里的 K3改成 K4,让它在 key1上是完全一样的,key2上有一些区别,这样难度就增加了。运行后的结果

image.png

得到的结果少了一行,因为它俩不一致,一致的才可以 merge,不一致的就没有merge。所以 merge 函数,默认情况下会这样:如果指定了多个 key,多个 key 当中有一些不一样的数据,接下来在 merge 的时候不一样的就会被过滤掉,一样的就被保留下来了。

3、how 指定。过滤掉好像是求了一个交集,如果保留起来就相当于求了一个并集,可以在这里指定一种方式,指定一个 how,how 里指定一个 outer、outer 相当于是一个并集

pd.merge(left,right,on=['key1','key2' ],how=' outer')

image.png

再来看一下结果,这个时候 ABCD、key1、key2都有了。

原来应该是四条数据,现在是五个数据,也就是说把所有情况都考虑进来了。K3K3是一种情况,K3K4又 是一种情况,只不过加上 NaN 值,相当于在 merge 的时候,你先写一个左边连什么表,右边连什么表,连的一个 key 值应该是什么,连接的方式默认情况下它一个交集,想指定一个并集也是可以的。并集当中会出现一些缺失值,因为本身它里面没有值,所以说就出现了这样一种情况。

4、指示器。交集并集可以指定一个指示器,这个指示器它会告诉你当前这个指标它是一个交集还是并集。

pd.merge(left, right,on=['key1','key2'],how=' outer', indicator = True)

加上之后再来执行一下。

image.png

both 是左右都有的, left _only 是只有左表有值,right_only 只有右表有值。所以说再加上这样一个参数,相当于是告诉了 merge 完后,它是按照什么情况做的。

然后这里还可以再指定一个东西,how 里不只可以指定交集并集,还可以指定以左表为基准还是以右表为基准。以左表为基准的时候,它会把左表中所有的键都保留下来,右表当中的键,没有保留下来。


二、总结。

这个就是在 pandas 中比较常用的一个函数 merge 函数。比如说分模块去提取一些特征,然后把特征进行合并,合并的时候需要有一些策略,基本上是用 merge 函数完成的。然后 left,right 两个表,on 是以什么为键,how 相当于是指定什么样的方式,这就是 merge 函数的一个基本用法。

相关文章
|
5月前
【Stata】append和merge的区别
【Stata】append和merge的区别
159 0
|
7月前
|
Python
使用`merge`函数将两个dataframe合并在一起,然后使用`query`函数根据指定的条件选取数据
在pandas中,可以使用`merge`函数将两个dataframe合并在一起,然后使用`query`函数根据指定的条件选取数据。
84 1
|
6月前
|
存储 SQL 关系型数据库
MySQL 优化 index merge(索引合并)引起的死锁分析(强烈推荐)
生产环境出现死锁流水,通过查看死锁日志,看到造成死锁的是两条一样的update语句(只有where条件中的值不同),如下:
|
分布式计算 关系型数据库 MySQL
导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据) | 学习笔记
快速学习 导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据)
169 0
导入 Import--增量导入--Lastmodified 模式(Merge key 合并数据) | 学习笔记
|
SQL 数据挖掘 数据库
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
650 0
DataFrame多表合并拼接函数concat、merge参数详解+代码操作展示
|
数据挖掘 开发者 索引
按索引合并 pd.merge| 学习笔记
快速学习按索引合并 pd.merge
533 0
|
SQL 监控 关系型数据库
index_merge导致死锁案例分析
一、死锁现象描述 1.1 基本环境信息 1、数据库版本以及隔离级别 mysql>select version(); +---------------------+ | version() | +---------------------+ | 5.
1067 0