python實現多表合併的操作
阿新 • • 發佈:2021-01-09
本文轉載自:https://blog.csdn.net/weixin_38131197/article/details/101481993
本貼僅是記錄,防止原創作者刪帖,請大家前往原創作者部落格多多支援原創。
通過python實現Sql中的表連線操作
一、merg實現表連線
資料準備:
import pandas as pd import numpy as np left = pd.DataFrame({'key':['K0','K1','K2','K3'], 'A':['A0','A1','A2','A3'], 'B':['B0','B1','B2','B3'] }) right = pd.DataFrame({'key':['K0','K11','K2','K31'], 'C':['C0','C1','C2','C3'], 'D':['D0','D1','D2','D3'] })
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
輸出結果:
1、單條件連線:merge
內連線:
# how引數不寫 預設是內連線
pd.merge(left,right,on = ['key'])
pd.merge(left,right,on = ['key'],how='inner')
- 1
- 2
- 3
輸出結果:
外連線(全連線):
# 外連線
pd.merge(left,right,on = ['key'],how='outer')
- 1
- 2
輸出結果:
左連線:
# 左連線
pd.merge(left,right,on = ['key'],how='left')
- 1
- 2
輸出結果:
右連線:
# 右連線
pd.merge(left,right,on = ['key'],how='right')
- 1
- 2
輸出結果:
2、多條件連線:merge
資料準備:
#多條件關聯 left1 = pd.DataFrame({'key1':['K0','K0','K1','K2'], 'key2':['K0','K1','K0','K1'], 'A':['A0','A1','A2','A3'], 'B':['B0','B1','B2','B3'] }) right1 = pd.DataFrame({'key1':['K0','K1','K1','K2'], 'key2':['K0','K0','K0','K0'], 'C':['C0','C1','C2','C3'], 'D':['D0','D1','D2','D3'] })
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
輸出結果:
內連線:
# 內連線 ,how 引數不寫預設是內連線
pd.merge(left1,right1,on=['key1','key2'])
pd.merge(left1,right1,on=['key1','key2'],how = 'inner')
- 1
- 2
- 3
輸出結果:
外連線(全連線):
# 外連線
pd.merge(left1,right1,on=['key1','key2'],how= 'outer')
- 1
- 2
輸出結果:
左連線:
# 左連線
pd.merge(left1,right1,on=['key1','key2'],how= 'left')
- 1
- 2
輸出結果:
右連線:
# 右連線
pd.merge(left1,right1,on=['key1','key2'],how= 'right')
- 1
- 2
輸出結果:
二、concat實現表連線
資料準備:
df1 = pd.DataFrame(np.ones((3,4))*0,columns= ['a','b','c','d'],index=(1,2,3))
df2 = pd.DataFrame(np.ones((3,4))*11,columns= ['b','c','d','e'],index=(2,3,4))
- 1
- 2
輸出結果:
1、行連線(橫向連線):
全連線:
pd.concat([df1,df2],axis=1)
- 1
輸出結果:
左連線:
pd.concat([df1,df2],axis=1,join_axes=[df1.index])
- 1
輸出結果:
右連線:
pd.concat([df1,df2],axis=1,join_axes=[df2.index])
- 1
輸出結果:
2、列連線(縱向連線):
兩種方法實現:concat/append
方法1、concat
pd.concat([df1,df2],axis=0)
- 1
輸出結果:
調整索引的順序:
pd.concat([df1,df2],axis=0,ignore_index =True)
- 1
輸出結果:
方法2、append
df1.append(df2,ignore_index=True)
- 1
輸出結果:
三、merge和concat的區別:
1、merge預設是內連線,concat預設是外連線
2、merge的引數how有left/right/inner/outer,concat的引數axis有0/1(0:列,1:行),通過concat實現左/右連線主要是跟引數寫的位置有關
3、merge合併的範圍廣泛,可以通過索引/列關聯,concat合併的範圍小,只支援索引的合併