1. 程式人生 > 其它 >python實現多表合併的操作

python實現多表合併的操作

本文轉載自: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合併的範圍小,只支援索引的合併