事情起因是媳妇儿在处理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 | #!/usr/bin/env python3 |
现在让我们逐行分析。
第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,取两侧表格共享列最大区间为基准(取并集)