python pandas數據匹配 merge函數

python中pandas數據匹配常用merge函數,其實merge函數就類似於excel中的vlookup hlookup lookup,最近excel又出了一個逆天的xlookup函數,默默地推薦一下,嘿嘿

轉載自:https://www.cnblogs.com/stream886/p/6022049.html,感謝博主

一定要看裏面的圖,很形象

使用Pandas進行數據匹配

本文轉載自:藍鯨的網站分析筆記

原文鏈接:使用Pandas進行數據匹配

 

目錄

 


Pandas中的merge函數類似於Excel中的Vlookup,可以實現對兩個數據表進行匹配和拼接的功能。與Excel不同之處在於merge函數有4種匹配拼接模式,分別爲inner,left,right和outer模式。 其中inner爲默認的匹配模式。本篇文章我們將介紹merge函數的使用方法和4種拼接模式的區別。

managed-services-mergers

下面是我們準備進行拼接的兩個數據表,左邊是貸款狀態表loan_stats,右邊爲用戶等級表member_grade。我們將分別用merge函數的4種匹配模式對這兩個表進行拼接。

row_data

準備工作

開始使用merge函數進行數據拼接之前先導入所需的功能庫,然後將分別讀取兩個數據表,並命名爲loanstats表和member_grade表。

1

2

3

4

import numpy as np

import pandas as pd

loanstats=pd.DataFrame(pd.read_excel('loanStats.xlsx'))

member_grade=pd.DataFrame(pd.read_excel('member_grade.xlsx'))

函數功能介紹

merge函數的使用方法很簡單,以下是官方的函數功能介紹和使用說明。merge函數中第一個出現的數據表是拼接後的left部分,第二個出現的數據表是拼接後的right部分。第三個是數據匹配模 式,默認是inner模式。第四個參數on表示數據匹配所依據的字段名稱,如果這個字段名稱同時出現在兩個數據表中,那麼可以省略on參數的設置,merge默認會按照兩個數據表中共有的字段名稱進行匹配和拼接。如果兩個數據表中的匹配字段名稱不一致,則需要分別在left_on和right_on參數中指明兩個表匹配字段的名稱。如果兩個數據表中沒有匹配字段,需要使用索引列進行匹配和拼接,可以對left_index和right_index參數設置爲True。merge還有一些排序和其他的參數,可在需要使用時進行設置。

merge

Inner模式匹配

inner模式是merge的默認匹配模式,我們通過下面的文氏圖來說明inner的匹配方法。Inner模式提供在loanstats和member_grade表中共有字段的匹配結果。也就是對兩個的表交集部分進行匹配和拼接。單獨只出現在一個表中的字段值不會參與匹配和拼接。

inner_img

以下是使用merge函數進行拼接的代碼,因爲inner是默認的拼接模式,因此也可以省略how=’inner’部分。其中第一個出現的loanstats出現在拼接後的左側,member_grade出現在拼接後的右側。拼接後的數據表中只包含兩個表的交集,因此不存在未匹配到的NaN情況。

1

loan_inner=pd.merge(loanstats,member_grade,how='inner')

inner
left模式匹配

left模式是左匹配,以左邊的數據表loanstats爲基礎匹配右邊的數據表member_grade中的內容。匹配不到的內容以NaN值顯示。在Excel中就好像將Vlookup公式寫在了左邊的表中。下面的文氏圖說明了left模式的匹配方法。Left模式匹配的結果顯示了所有左邊數據表的內容,以及和右邊數據表共有的內容。

left_img

以下爲使用left模式匹配並拼接後的結果,loanstats在merge函數中第一個出現,因此爲左表,member_grade第二個出現,爲右表。匹配模式爲left模式。從結果中可以看出left匹配模式保留了一張完整的loanstats表,以此爲基礎對member_grade表中的內容進行匹配。loanstats表中有兩個member_id值在member_grade中無法找到,因此grades字段顯示爲NaN值。

1

loan_left=pd.merge(loanstats,member_grade,how='left')

left
right模式匹配

第三種模式是right匹配,right與left模式正好相反,right模式是右匹配,以右邊的數據表member_grade爲基礎匹配左邊的數據表loanstats。匹配不到的內容以NaN值顯示。下面通過文氏圖說明right模式的匹配方法。Right模式匹配的結果顯示了所有右邊數據表的內容,以及和左邊數據表共有的內容。

right_img

以下爲使用right模式匹配拼接的結果,從結果表中可以看出right匹配模式保留了完整的member_grade表,以此爲基礎對loanstats表進行匹配,在member_grade數據表中有兩個條目在loanstats數據表中無法找到,因此顯示爲了NaN值。

1

loan_right=pd.merge(loanstats,member_grade,how='right')

right

outer模式匹配

最後一種模式是outer匹配,outer模式是兩個表的彙總,將loanstats和member_grade兩個要匹配的兩個表彙總在一起,生成一張彙總的唯一值數據表以及匹配結果。

outer_img
下面是使用outer模式匹配拼接的結果,其中member_id列包含了loanstats和member_grade中的唯一值,grade列顯示了對member_grade表匹配的結果,其他列則顯示了對loanstats表匹配的結果 ,無法匹配的內容以NaN值顯示。

1

loan_outer=pd.merge(loanstats,member_grade,how='outer')

outer
NaN值匹配問題

在進行數據匹配和拼接的過程中經常會遇到NaN值。這種情況下merge函數會如何處理呢?merge會將兩個數據表中的NaN值進行交叉匹配拼接,換句話說就是將loanstats表member_id列中的NaN值
分別與member_grade表中member_id列中的每一個NaN值進行匹配,然後再拼接在一張表中。下面是包含NaN值的兩張數據表進行拼接的結果,當我們使用left模式進行匹配時,loanstats作爲基礎
表,其中member_id列的NaN值分別與member_grade表中member_id列的每一個NaN值進行匹配。並將匹配結果顯示在了結果表中。

1

loan_left=pd.merge(loanstats,member_grade,how='left')

NaN值匹配

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