vlookup函数的Python实现

工作中,我们经常会用到vlookup函数来实现数据对碰,但是窃以为vlookup的使用体验极差,首先数据量一多的话,Excel就会死机,第二使用过程中经常会因为设置不当而出不来需要的结果,譬如绝对引用的设置,第三需要进行多条件对碰的话,设置太复杂,我就不会用。所以今天我们就来讲讲在Python中如何实现vlookup以及它的优势。

首先导入数据,我们示例的df1是

    姓名    语文
0	张三    99
1	李四    98
2	王五    97
3	赵六    96

df2是

    姓名    数学
0	张三    89
1	李四    88
2	王五    87
3	韩七    86

在Python中是用merge函数来实现vlookup的功能的,需要对碰的数据列就用on来标识,下图中我们就是用姓名这一列把两张表关联起来。另外,merge函数提供了4种连接方式,不设置的话默认为inner连接,即求的是交集

pd.merge(df1, df2, on = '姓名')

    姓名    语文    数学
0	张三    99      89
1	李四    98      88
2	王五    97      87

其他3种连接方式分别是left(以左表为基础进行连接)、right(以右表为基础进行连接)和outer(求并集),对于其中没有的字段就用空值填充

pd.merge(df1, df2, on = '姓名', how = 'left')

    姓名    语文    数学
0	张三    99      89.0
1	李四    98      88.0
2	王五    97      87.0
3	赵六    96      NaN

pd.merge(df1, df2, on = '姓名', how = 'right')

    姓名    语文    数学
0	张三    99.0    89
1	李四    98.0    88
2	王五    97.0    87
3	韩七    NaN     86

pd.merge(df1, df2, on = '姓名', how = 'outer')

    姓名    语文    数学
0	张三    99.0    89.0
1	李四    98.0    88.0
2	王五    97.0    87.0
3	赵六    96.0    NaN
4	韩七    NaN     86.0

另外使用merge函数的一个优势是,如果匹配的条件中存在重名字段,使用vlookup的话默认是只匹配第一项的,而merge则能够匹配所有项,方便我们后续手工筛选,防止漏掉数据。如下图中我们在df1中增加一个张三的数据项,使用内连接后就会出现2个张三的对碰结果。

    姓名    语文
0	张三    99
1	李四    98
2	王五    97
3	赵六    96
4	张三    96

    姓名    语文    数学
0	张三    99      89
1	张三    96      89
2	李四    98      88
3	王五    97      87

最后介绍一下,用merge函数来实现多个匹配条件的数据对碰,我们来看一下数据以及实现,总体还是很简单。

df1 = pd.read_excel("1.xlsx")

    姓名    班级    语文
0	张三    1       99
1	李四    1       98
2	王五    1       97
3	赵六    1       96
4	张三    2       79
5	李四    2       78
6	王五    2       77
7	赵六    2       76

df2 = pd.read_excel("2.xlsx")

    姓名    班级    数学
0	张三    1       89
1	李四    1       88
2	王五    1       87
3	韩七    1       86

pd.merge(df1, df2, on = ['姓名', '班级'])

	姓名    班级    语文    数学
0	张三    1       99      89
1	李四    1       98      88
2	王五    1       97      87

 

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值