开发者学堂课程【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']})
然后把这两个表进行合并,可以直接 merge,把左表和右表传进来,这两个就相当于需要的两个参数,默认情况下它会让指定left等于什么,right 等于什么,相当于两个表之间进行合并,不写前面的参数也可以,前两个参数就是左表和右表都给传进去
pd.merge( left,right)
这就完成了,然后看结果。
但是当前的结果,只有一个 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']})
结果没有什么变化,就是多了两列,然后就可以执行 merge 操作,on 的时候可以指定,比如说 on key1
pd.merge(left, right, on='key1')
出现这样一个结果
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上有一些区别,这样难度就增加了。运行后的结果
得到的结果少了一行,因为它俩不一致,一致的才可以 merge,不一致的就没有merge。所以 merge 函数,默认情况下会这样:如果指定了多个 key,多个 key 当中有一些不一样的数据,接下来在 merge 的时候不一样的就会被过滤掉,一样的就被保留下来了。
3、how 指定。过滤掉好像是求了一个交集,如果保留起来就相当于求了一个并集,可以在这里指定一种方式,指定一个 how,how 里指定一个 outer、outer 相当于是一个并集
pd.merge(left,right,on=['key1','key2' ],how=' outer')
再来看一下结果,这个时候 ABCD、key1、key2都有了。
原来应该是四条数据,现在是五个数据,也就是说把所有情况都考虑进来了。K3K3是一种情况,K3K4又 是一种情况,只不过加上 NaN 值,相当于在 merge 的时候,你先写一个左边连什么表,右边连什么表,连的一个 key 值应该是什么,连接的方式默认情况下它一个交集,想指定一个并集也是可以的。并集当中会出现一些缺失值,因为本身它里面没有值,所以说就出现了这样一种情况。
4、指示器。交集并集可以指定一个指示器,这个指示器它会告诉你当前这个指标它是一个交集还是并集。
pd.merge(left, right,on=['key1','key2'],how=' outer', indicator = True)
加上之后再来执行一下。
both 是左右都有的, left _only 是只有左表有值,right_only 只有右表有值。所以说再加上这样一个参数,相当于是告诉了 merge 完后,它是按照什么情况做的。
然后这里还可以再指定一个东西,how 里不只可以指定交集并集,还可以指定以左表为基准还是以右表为基准。以左表为基准的时候,它会把左表中所有的键都保留下来,右表当中的键,没有保留下来。
二、总结。
这个就是在 pandas 中比较常用的一个函数 merge 函数。比如说分模块去提取一些特征,然后把特征进行合并,合并的时候需要有一些策略,基本上是用 merge 函数完成的。然后 left,right 两个表,on 是以什么为键,how 相当于是指定什么样的方式,这就是 merge 函数的一个基本用法。