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

解决一个问题:关联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.htmlhttp://jianlei.github.io/archives/651663e0.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值