使用Pandas Merge替代Excel Vlookup



事情起因是媳妇儿在处理excel数据的时候,用VLookup查找查找数据的时候,发现经常出现查找错误,折腾了好几天,也没找到规律,所以我决定用Python Pandas替换Excel的VLookup函数。

假设我们有这样一个Excel文件:
Sheet1为:

Sheet2为:

其中Sheet2数据比Sheet1数据多一条,我们要实现的目标是把Sheet1中人员对应的年龄放到Sheet2对应的人员上,如果人员在Sheet1中不存在,则不用处理。
预期结果如下图所示:

正常我们可以用Excel的VLookup实现这个功能,但是不知道为啥,VLookup在数量大的时候经常查询错乱,所以这里用Pandas的merge功能实现VLookup。

1
What is vlookup? Vlookup is essentially combining two different tables using a shared column.

实现代码如下:(我这里用的是Aconda配置的Python环境)

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
# _*_ coding: utf-8 _*_


import pandas as pd

df1 = pd.read_excel("/Users/daren/Downloads/1.xlsx", sheet_name=0)
df2 = pd.read_excel("/Users/daren/Downloads/1.xlsx", sheet_name=1)

c = df1.merge(df2, on="Name", how="right")
# c=pd.merge(a,b,how='right')
# print(c.head())
c.to_excel('3.xlsx', sheet_name='result')

现在让我们逐行分析。
第5行:引入pandas library
第7-8行:使用pandas.read_excel方法导入excel表格的两个Sheet页面,作为dataframe对象。
第10行:执行merge操作,也就是实现VLookup函数的地方。

基于共有的“Name”列merge df1和df2,生成一个新的dataframe,然后生成excel。
c = df1.merge(df2, on=”Name”, how=”left”)
其中df1作为left dataframe,df2作为right dataframe。

how有4中选择生成新的dataframe:

  • left,以左侧表格共享列为基准
  • right,以右侧表格共享列为基准
  • inner,以两侧共有表格共享列为基准(取交集)
  • outer,取两侧表格共享列最大区间为基准(取并集)

下载1.xlsx

参考资料
分享到