1. 程式人生 > 程式設計 >Python Merge函式原理及用法解析

Python Merge函式原理及用法解析

Merge函式的用法

簡單來說Merge函式相當於Excel中的vlookup函式。當我們對2個表進行資料合併的時候需要通過指定兩個表中相同的列作為key,然後通過key匹配到其中要合併在一起的values值。

然後對於merge函式在Pandas中分為1vs1,多(m)vs1,以及多(m)vs多(m)這三種場景。但是平時用的最多的往往是多vs1的這種場景。也就是說2個表中其中一個表作為key的值會出現重複,而另外一個表作為key的值則是唯一。

這種場景也很好理解。例如:我們在生產環境中對伺服器進行管理,一臺伺服器上可能裝了各種各樣的軟體。那麼如果是Excel表格來管理的話一個軟體就佔用一行資訊。而伺服器名是相同的。所以一個相同的伺服器名就會出現多個。

這臺伺服器上安裝了多少個軟體,伺服器名就會重複幾次,也就是最終有幾行。那麼另外一個表要想讀取這臺伺服器上安裝的所有軟體,那麼伺服器名就要作為key,各個軟體的資訊則是value值。最終被讀取寫入的那張表的key只能唯一。

我們看下面這個案例,是真實多v1的案例。為了資料安全我只能把截圖分享給大家,並把伺服器名遮掩希望大家諒解。

資料表1:作為查詢的總表,其中伺服器名這列就是B列中的資訊會出現重複

Python Merge函式原理及用法解析

資料表2:下表為按照表1的key就是hostname來匹配,匹配到後按照表2的列名來讀取資訊寫入到表2.這裡同上因為伺服器名敏感,所以也用馬賽克擋住了,忘諒解。

Python Merge函式原理及用法解析

程式碼演示:

1. 讀取表1,表2中的內容,作為DataFrame賦值給變數

#%%

import pandas as pd

#讀取表1
df01 = pd.read_excel("./datas/new_all_datas.xlsx",header=5)
df01.head()

#%%

#讀取表2
df02 = pd.read_excel("./datas/new_software_InputSheet.xlsx")
df02

#%%

2. 通過merge函式合併兩個DataFrame。on代表指明拿什麼作為key來進行匹配。how這裡分為left,right,inner,outer等方式。這裡left代表按照表1為主表進行合併。

#%%
#ホスト名作為key來匹配兩個表,相當於vlookup函式
#how=left代表以left左表為主,這裡則代表表二為左表
df03 = pd.merge(df02,df01,on="ホスト名",how="left")
df03

結果:合併結果如下。但是因為表1,表2中出現重複元素的列名,因此合併後Pandas會按照字尾,把相同列名按照_x,_y的方式生成多列。

Python Merge函式原理及用法解析

3. 去除沒用的列並按照條件查詢想要的資料. 下列需求是按照伺服器名,找出對應的"ソフトウェア名"也就是software名為Trend Micro的軟體以及"ソフトウェア製造元"software製造商為Symantec的所有行。

#%%
#因為表中有相同的列名因此自動字尾被加上了_y
#下面代表篩選查詢範圍,以及指定查詢值
df03 = df03.loc[:,["ホスト名","行番號","ソフトウェア區分_y","ソフトウェア名_y","ソフトウェアバージョン_y","ソフトウェア製造元_y"]]
df04 = df03[(df03["ソフトウェア名_y"]=="Trend Micro") | (df03["ソフトウェア製造元_y"]=="Symantec")]

#重新把列名設定換一下然後輸出
df04.columns = ["ホスト名","ソフトウェア區分","ソフトウェア名","ソフトウェアバージョン","ソフトウェア製造元"]
df04

結果:

Python Merge函式原理及用法解析

4. 將資料匯出到Excel檔案

#%%

with pd.ExcelWriter("./datas/output_mergedatas.xlsx") as writer:
  df04.to_excel(writer,index=False)
  print("Done!!")

結果:當然也可以直接匯入到資料表2中去。我這裡為了不破壞原表,因此作為新的Excel表匯出了。

Python Merge函式原理及用法解析

大家在日常業務中,如果遇到類似場景可以嘗試通過merge函式來合併您的資料。還可以結合loc切片以及寫下來要發表的pivot,pivot_table透視表來更加豐富的對資料進行清洗。

總體而言用慣了Pandas後會感覺相比Excel中的函式及巨集。Pandas會更加的靈活也更加的強大。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。