Pandas數據分析教程——Merge數據合併圖文詳解

微信公衆號:「Python讀財」
如有問題或建議,請公衆號留言

爲了方便維護,一般公司的數據在數據庫內都是分表存儲的,比如用一個表存儲所有用戶的基本信息,一個表存儲用戶的消費情況。所以,在日常的數據處理中,經常需要將兩張表拼接起來使用,這樣的操作對應到SQL中是join,在Pandas中則是用merge來實現。這篇文章就講一下merge的主要原理。

上面的引入部分說到merge是用來拼接兩張表的,那麼拼接時自然就需要將用戶信息一一對應地進行拼接,所以進行拼接的兩張表需要有一個共同的識別用戶的鍵(key)。總結來說,整個merge的過程就是將信息一一對應匹配的過程,下面介紹merge的四種類型,分別爲'inner''left''right''outer'

一、inner

merge'inner'的類型稱爲內連接,它在拼接的過程中會取兩張表的鍵(key)的交集進行拼接。什麼意思呢?下面以圖解的方式來一步一步拆解。

首先我們有以下的數據,左側和右側的數據分別代表了用戶的基礎信息消費信息,連接兩張表的鍵是userid

數據.png

現在用'inner'的方式進行merge

In [6]: df_1.merge(df_2,how='inner',on='userid')
Out[6]:
  userid  age  payment
0      a   23     2000
1      c   32     3500

過程圖解:

①取兩張表的鍵的交集,這裏df_1df_2userid的交集是{a,c}

inner_1.png

②對應匹配

inner_2.png

③結果

inner_3.png

過程彙總:

inner_4.png

相信整個過程並不難理解,上面演示的是同一個鍵下,兩個表對應只有一條數據的情況(一個用戶對應一條消費記錄),那麼,如果一個用戶對應了多條消費記錄的話,那又是怎麼拼接的呢?

假設現在的數據變成了下面這個樣子,在df_2中,有兩條和a對應的數據:

數據2.png

同樣用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_1df_2userid的交集是{a,b,c}

inner_2_1.png

②對應匹配時,由於這裏的a有兩條對應的消費記錄,故在拼接時,會將用戶基礎信息表中a對應的數據複製多一行來和右邊進行匹配

inner_2_2.png

③結果

inner_2_3.png

二、left 和right

'left''right'merge方式其實是類似的,分別被稱爲左連接右連接。這兩種方法是可以互相轉換的,所以在這裏放在一起介紹。

'left'merge時,以左邊表格的鍵爲基準進行配對,如果左邊表格中的鍵在右邊不存在,則用缺失值NaN填充。

'right'merge時,以右邊表格的鍵爲基準進行配對,如果右邊表格中的鍵在左邊不存在,則用缺失值NaN填充。

什麼意思呢?用一個例子來具體解釋一下,這是演示的數據

數據3_left.png

現在用'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不在左表中,故不會進行配對。

left_1.png

②若右表中的payment列合併到左表中,對於沒有匹配值的用缺失值NaN填充

left_2.png

過程彙總:

left_3.png

對於'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

'outer'外連接,在拼接的過程中它會取兩張表的鍵(key)的並集進行拼接。看文字不夠直觀,還是上例子吧!

還是使用上方用過的演示數據

數據3_left.png

這次使用'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}

outer_1.png

②將兩張表的數據列拼起來,對於沒有匹配到的地方,使用缺失值NaN進行填充

outer_2.png

能讀到這裏的小夥伴想必也基本理解了merge的整個過程,總結來說,merge的不同類型區別就在於拼接時,選用的兩個表格的鍵的集合不同。關於Pandas的merge就介紹到這裏!

原創不易,如果覺得有點用,希望可以隨手點個贊,拜謝各位老鐵。

掃碼關注公衆號 「Python讀財」,第一時間獲取乾貨,還可以加數據分析學習交流羣!!
底部二維碼1.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章