数据处理:从Excel函数Vlookup到Python函数Pandas

技巧分享 技巧 python 分享

解决一个问题:关联AB两张表,以特定列作为关联基准,将B表中的数据关联进A表中

问题描述

表一:

表二:

可以看到两张表都存在可作为关联基准列姓名,想要把表2中爱好年龄列从表1中根据姓名列匹配出来

解决方法一:Excel函数Vlookup

插入函数:VLOOKUP(参数1,参数2,参数3,参数4)

VLOOKUP函数有4个参数,具体含义如下:
参数1:目标表的关联列(本文示例中sheet2中 A列为关联列)
参数2:根据关联表的哪个区域匹配 (本文示例中sheet1 中 A2:B10 为关联区域)
参数3:需要匹配查找区域的第几列。(本文示例中年龄列为匹配区域的第二列)
参数4:查找模式,即是要精确查找还是要模糊查找,精确查找:False或0,模糊查找:True或1 (本文示例使用精确查找,0)

我这里使用WPS,公式-查找与引用-VLOOKUP

在对应区域使用VLOOKUP函数


批量匹配的时候只需要选中当前列的区域,然后把公式复制即可,表格会自动递增更新参数1的值
另外,用IFERROR函数可以控制匹配返回值

=IFERROR(VLOOKUP(B1,sheet1!$A:$C,3,0),"")

判断VLOOKUP执行后,如果匹配到值则正常返回,如果没匹配到,则返回空(即公式的"")

解决方法二:Python函数Pandas

表一:

表二:

最后效果:

其中Sheet2数据比Sheet1数据多一条,我们要实现的目标是把Sheet1中人员对应的年龄放到Sheet2对应的人员上,如果人员在Sheet1中不存在,则不用处理。
使用Pandas函数实现

#!/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,取两侧表格共享列最大区间为基准(取并集)

参考
https://www.cnblogs.com/yaoze2018/p/12578352.html
http://jianlei.github.io/archives/651663e0.html

新评论

称呼不能为空
邮箱格式不合法
网站格式不合法
内容不能为空