我是靠谱客的博主 羞涩金鱼,最近开发中收集的这篇文章主要介绍pandas——Merge做表之间的连接一个公共column两个公共columns,看看结果,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
基于某个column或某些columns做连接
连接时有4种方法how = [‘left’, ‘right’, ‘outer’, ‘inner’],默认值how=‘inner’
- how=‘inner’ 默认值,内连接(sql中的自然连接)。按参数on的值交,其实就是键的交集(数据块系统概论54页,详细)
- how=‘outer’ 外连接,按参数on的值并,并了之后其他特征上没有值的会NaN补
- how=‘left’ 左连接,是以第一个 DataFrame 为主进行的连接,第二个DataFrame作为补充
- how=‘right’ 右连接,是以第二个 DataFrame 为主进行的连接,第一个DataFrame作为补充
一个公共column
import pandas as pd
特殊:公共属性:key , 很巧,两个key的值(数量、内容)一模一样,那就很简单了,四种连接方式结果一模一样
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']})
print(left)
print(right)
A
B key
0
A0
B0
K0
1
A1
B1
K1
2
A2
B2
K2
3
A3
B3
K3
C
D key
0
C0
D0
K0
1
C1
D1
K1
2
C2
D2
K2
3
C3
D3
K3
pd.merge(left, right, on='key')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A2 | B2 | K2 | C2 | D2 |
3 | A3 | B3 | K3 | C3 | D3 |
一般情况下为:公共column: key,两个表的key的值(数量、内容)不一样
一般情况下:
公共属性:key ,两个key的值不一样
key的交集:[k0, k1]
left1中的悬浮元组为:(A2, K2, K2)
left2中的悬浮元组为:(C4, D4, K4)
内连接:舍弃所有的悬浮元组,之后做连接
外连接:保留所有的悬浮元组,做连接,没值属性的补空NaN
左连接:只保留左表left的悬浮元组,做连接,右表上没值属性补NaN
右连接:只保留右表right的悬浮元组,做连接,左表上没值属性补NaN
看例子:
left1 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']})
right1 = pd.DataFrame({'key': ['K0', 'K1', 'K1', 'K4'],
'C': ['C0', 'C1', 'C10', 'C4'],
'D': ['D0', 'D1', 'D10', 'D4']})
print(left1)
print(right1)
A
B key
0
A0
B0
K0
1
A1
B1
K1
2
A2
B2
K2
C
D key
0
C0
D0
K0
1
C1
D1
K1
2
C10
D10
K1
3
C4
D4
K4
#默认,内连接
pd.merge(left1, right1, on='key')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A1 | B1 | K1 | C10 | D10 |
#外连接
pd.merge(left1, right1, on='key', how='outer')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A1 | B1 | K1 | C10 | D10 |
3 | A2 | B2 | K2 | NaN | NaN |
4 | NaN | NaN | K4 | C4 | D4 |
#左连接
pd.merge(left1, right1, on='key', how='left')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A1 | B1 | K1 | C10 | D10 |
3 | A2 | B2 | K2 | NaN | NaN |
#右连接
pd.merge(left1, right1, on='key', how='right')
A | B | key | C | D | |
---|---|---|---|---|---|
0 | A0 | B0 | K0 | C0 | D0 |
1 | A1 | B1 | K1 | C1 | D1 |
2 | A1 | B1 | K1 | C10 | D10 |
3 | NaN | NaN | K4 | C4 | D4 |
两个公共columns,看看结果
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print(right)
A
B key1 key2
0
A0
B0
K0
K0
1
A1
B1
K0
K1
2
A2
B2
K1
K0
3
A3
B3
K2
K1
C
D key1 key2
0
C0
D0
K0
K0
1
C1
D1
K1
K0
2
C2
D2
K1
K0
3
C3
D3
K2
K0
注意left和right的[key1,key2]的值有所不同
pd.merge(left,right,on=['key1','key2'])
#默认:how=inner
#看看效果:只保留了共同的[key1,key2]
inner连接:交
A | B | key1 | key2 | C | D | |
---|---|---|---|---|---|---|
0 | A0 | B0 | K0 | K0 | C0 | D0 |
1 | A2 | B2 | K1 | K0 | C1 | D1 |
2 | A2 | B2 | K1 | K0 | C2 | D2 |
pd.merge(left, right, on=['key1','key2'], how='outer')
#看看效果:outer连接:并 (没有值的就补NaN)
A | B | key1 | key2 | C | D | |
---|---|---|---|---|---|---|
0 | A0 | B0 | K0 | K0 | C0 | D0 |
1 | A1 | B1 | K0 | K1 | NaN | NaN |
2 | A2 | B2 | K1 | K0 | C1 | D1 |
3 | A2 | B2 | K1 | K0 | C2 | D2 |
4 | A3 | B3 | K2 | K1 | NaN | NaN |
5 | NaN | NaN | K2 | K0 | C3 | D3 |
pd.merge(left, right, on=['key1','key2'], how='left')
#left的key全保留,同时right在left里有的key保留
A | B | key1 | key2 | C | D | |
---|---|---|---|---|---|---|
0 | A0 | B0 | K0 | K0 | C0 | D0 |
1 | A1 | B1 | K0 | K1 | NaN | NaN |
2 | A2 | B2 | K1 | K0 | C1 | D1 |
3 | A2 | B2 | K1 | K0 | C2 | D2 |
4 | A3 | B3 | K2 | K1 | NaN | NaN |
pd.merge(left, right, on=['key1','key2'], how='right')
#
A | B | key1 | key2 | C | D | |
---|---|---|---|---|---|---|
0 | A0 | B0 | K0 | K0 | C0 | D0 |
1 | A2 | B2 | K1 | K0 | C1 | D1 |
2 | A2 | B2 | K1 | K0 | C2 | D2 |
3 | NaN | NaN | K2 | K0 | C3 | D3 |
最后
以上就是羞涩金鱼为你收集整理的pandas——Merge做表之间的连接一个公共column两个公共columns,看看结果的全部内容,希望文章能够帮你解决pandas——Merge做表之间的连接一个公共column两个公共columns,看看结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复