微信公众号:「Python读财」
若有问题或建议,请公众号留言
为了方便维护,通常公司的数据在数据库内都是分表存储的,好比用一个表存储全部用户的基本信息,一个表存储用户的消费状况。因此,在平常的数据处理中,常常须要将两张表拼接起来使用,这样的操做对应到SQL中是join
,在Pandas中则是用merge
来实现。这篇文章就讲一下merge
的主要原理。python
上面的引入部分说到merge
是用来拼接两张表的,那么拼接时天然就须要将用户信息一一对应地进行拼接,因此进行拼接的两张表须要有一个共同的识别用户的键(key)。总结来讲,整个merge
的过程就是将信息一一对应匹配的过程,下面介绍merge
的四种类型,分别为'inner'
、'left'
、'right'
和'outer'
。数据库
merge
的'inner'
的类型称为内链接,它在拼接的过程当中会取两张表的键(key)的交集进行拼接。什么意思呢?下面以图解的方式来一步一步拆解。微信
首先咱们有如下的数据,左侧和右侧的数据分别表明了用户的基础信息和消费信息,链接两张表的键是userid
。学习
如今用'inner'
的方式进行merge
spa
In [6]: df_1.merge(df_2,how='inner',on='userid') Out[6]: userid age payment 0 a 23 2000 1 c 32 3500
过程图解:3d
①取两张表的键的交集,这里df_1
和df_2
的userid
的交集是{a,c}
code
②对应匹配blog
③结果rem
过程汇总:it
相信整个过程并不难理解,上面演示的是同一个键下,两个表对应只有一条数据的状况(一个用户对应一条消费记录),那么,若是一个用户对应了多条消费记录的话,那又是怎么拼接的呢?
假设如今的数据变成了下面这个样子,在df_2
中,有两条和a
对应的数据:
一样用inner
的方式进行merge
:
In [12]: df_1.merge(df_2,how='inner',on='userid') Out[12]: userid age payment 0 a 23 2000 1 a 23 500 2 b 46 1000 3 c 32 3500
整个过程除了对应匹配阶段,其余和上面基本都是一致的。
过程图解:
①取两张表的键的交集,这里df_1
和df_2
的userid
的交集是{a,b,c}
②对应匹配时,因为这里的a
有两条对应的消费记录,故在拼接时,会将用户基础信息表中a
对应的数据复制多一行来和右边进行匹配。
③结果
'left'
和'right'
的merge
方式实际上是相似的,分别被称为左链接和右链接。这两种方法是能够互相转换的,因此在这里放在一块儿介绍。
'left'
:merge
时,以左边表格的键为基准进行配对,若是左边表格中的键在右边不存在,则用缺失值NaN
填充。
'right'
:merge
时,以右边表格的键为基准进行配对,若是右边表格中的键在左边不存在,则用缺失值NaN
填充。
什么意思呢?用一个例子来具体解释一下,这是演示的数据
如今用'left'
的方式进行merge
In [21]: df_1.merge(df_2,how='left',on='userid') Out[21]: userid age payment 0 a 23 2000.0 1 b 46 NaN 2 c 32 3500.0 3 d 19 NaN
过程图解:
①以左边表格的全部键为基准进行配对。图中,由于右表中的e
不在左表中,故不会进行配对。
②若右表中的payment
列合并到左表中,对于没有匹配值的用缺失值NaN
填充
过程汇总:
对于'right'
类型的merge
和'left'
实际上是差很少的,只要把两个表格的位置调换一下,两种方式返回的结果就是同样的(),以下:
In [22]: df_2.merge(df_1,how='right',on='userid') Out[22]: userid payment age 0 a 2000.0 23 1 c 3500.0 32 2 b NaN 46 3 d NaN 19
至于'left'
和'right'
中(乃至于下面将介绍的'outer'
)链接的键是一对多的状况,原理和上方的'inner'
是相似的,这里便再也不赘述。
'outer'
是外链接,在拼接的过程当中它会取两张表的键(key)的并集进行拼接。看文字不够直观,仍是上例子吧!
仍是使用上方用过的演示数据
此次使用'outer'
进行merge
In [24]: df_1.merge(df_2,how='outer',on='userid') Out[24]: userid age payment 0 a 23.0 2000.0 1 b 46.0 NaN 2 c 32.0 3500.0 3 d 19.0 NaN 4 e NaN 600.0
图解以下:
①取两张表键的并集,这里是{a,b,c,d,e}
②将两张表的数据列拼起来,对于没有匹配到的地方,使用缺失值NaN
进行填充
能读到这里的小伙伴想必也基本理解了merge
的整个过程,总结来讲,merge
的不一样类型区别就在于拼接时,选用的两个表格的键的集合不一样。关于Pandas的merge
就介绍到这里!
原创不易,若是以为有点用,但愿能够随手点个赞,拜谢各位老铁。
扫码关注公众号「Python读财」,第一时间获取干货,还能够加Python学习交流群!!