【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列中的信息会出现重复
数据表2:下表为按照表1的key就是hostname来匹配,匹配到后按照表2的列名来读取信息写⼊到表2.这⾥同上因为服务器名敏感,所以也⽤马赛克挡住了,忘谅解。
代码演⽰:
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为主表进⾏合并。
#%%
python index函数
#ホスト名作为key来匹配两个表,相当于vlookup函数
#how=left代表以left左表为主,这⾥则代表表⼆为左表
df03 = pd.merge(df02,df01,on="ホスト名",how="left")
df03
结果:合并结果如下。但是因为表1,表2中出现重复元素的列名,因此合并后Pandas会按照后缀,把相同列名按照_x,_y的⽅式⽣成多列。
3. 去除没⽤的列并按照条件查询想要的数据. 下列需求是按照服务器名,出对应的"ソフトウェア名"也就是software名为Trend Micro的软件以及"ソフトウェア製造元"software制造商为Symantec的所有⾏。
#%%
#因为表中有相同的列名因此⾃动后缀被加上了_y
#下⾯代表筛选查询范围,以及指定查询值
df03 = df03.loc[:,["ホスト名","⾏","ソフトウェア区分_y","ソフトウェア名_y","ソフトウェアバージョン_y","ソフトウェア製造元_y"]]
df04 = df03[(df03["ソフトウェア名_y"]=="Trend Micro") | (df03["ソフトウェア製造元_y"]=="Symantec")]
#重新把列名设定换⼀下然后输出
df04
结果:
4. 将数据导出到Excel⽂件
#%%
with pd.ExcelWriter("./datas/output_mergedatas.xlsx") as writer:
<_excel(writer,index=False)
print("Done!!")
结果:当然也可以直接导⼊到数据表2中去。我这⾥为了不破坏原表,因此作为新的Excel表导出了。
⼤家在⽇常业务中,如果遇到类似场景可以尝试通过merge函数来合并您的数据。还可以结合loc切⽚以及写下来要发表的pivot,pivot_table透视表来更加丰富的对数据进⾏清洗。
总体⽽⾔⽤惯了Pandas后会感觉相⽐Excel中的函数及宏。Pandas会更加的灵活也更加的强⼤。