使用Pandas進行數據匹配


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

 

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

  

准備工作

開始使用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還有一些排序和其他的參數,可在需要使用時進行設置。

  

Inner模式匹配

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

 

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

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

  

left模式匹配

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

 

 以下為使用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' )

 

right模式匹配

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

 

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

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

 

 

outer模式匹配

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

 


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

1
loan_outer = pd.merge(loanstats,member_grade,how = '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' )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM