前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懂Excel就能轻松入门Python数据分析包pandas(八):匹配查找

懂Excel就能轻松入门Python数据分析包pandas(八):匹配查找

作者头像
咋咋
发布2021-09-01 14:33:39
1.1K0
发布2021-09-01 14:33:39
举报
文章被收录于专栏:数据大宇宙

> 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

匹配查找是数据处理中经常出现的场景,如果懂点 Excel 的,基本都会 vlookup 这公式,今天我们来看看 pandas 中是怎么做到 vlookup 一样的效果,并且是懒人模式的匹配。

本文结构:

  • - 正常匹配(自带懒人模式)
  • - 当数据源关键列有重复时,pandas 提醒模式(Excel 中你不会知道数据有问题)
  • - 有时候需求真的有重复数据,看看怎么匹配重复中指定条件的记录
  • - DIY 一个自己风格的 vlookup

数据

这次不再展示 Excel 功能了,vlookup 谁不会呢。直接看实战。

数据长这个样子:

比 vlookup 还要智能?

pandas 中有多种数据配对实现方式,其中最像 Excel vlookup 公式的,就属 merge。

"根据名字找出其他信息":

  • - 前2句只是加载数据
  • - 核心就一句,待匹配表.merge(数据源,how='left')
  • - What!我还没说用哪一列找啊。pandas 会自动识别匹配表与数据源的列,有交集的自动识别为匹配依据

看看,假如"待匹配"有 部门 与 收入,反过来找 名字 与性别:

  • - 代码其实没有变化,懒人模式嘛,有哪些列可以在数据源那边找到,就自动帮你搞定

潜在的问题

实际上,merge 是按照数据库的关系连接进行设计的,其中"笛卡尔积"是其中的核心逻辑。说白了就是当右表出现重复匹配时,会默认返回所有记录(毕竟不能丢失数据嘛)。

看看如下例子:

  • - 与之前一样的代码,只是匹配数据只有部门列
  • - 现在结果就与 vlookup 不一样了,这是因为数据源有多行记录可以匹配到,因此会把匹配结果都返回

看起来效果还不错呢。但是,有时候我们会无意中跌入陷阱。

看看数据:

  • - 现在还是用名字匹配信息
  • - 但是数据源中,第一行的人名在其他部门也存在

看看匹配执行结果:

  • - 代码仍然是一样
  • - 结果却多了一笔记录

> 这就是为什么写 Sql 关联多表时,我们都会很小心考虑表之间的颗粒度。

> tips:在专栏第9节有详细讲解关于数据颗粒度的理解与实战场景

既然 pandas 的 merge 方法是按照关系数据库表连接设计的,那么自然有数据库中的"关系验证"功能:

  • - merge 设置参数 validate='1:1' ,表示1对1关系(匹配表1条记录只能匹配数据源表1条记录)
  • - 现在,再次执行匹配,pandas 报错,明确告诉你,右表有重复记录

> 还有其他的验证关系,比如:'1:m','m:1','m:m'

身不由己

有时候需求就是要在重复数据中匹配某一条符合条件的记录。但是,pandas 中的 merge 是不会提供这样的功能。因为 pandas 中处理数据非常简单灵活,把数据源按要求处理规范是非常简单。下面看看例子。

"匹配时间最晚的人员信息":

  • - 先把数据源按要求得到最后更新的记录即可

> 跟着专栏学习的同学应该都能理解,这里不展开讲解

我们可以用 Python 的基本知识即可对这些逻辑进行封装。

"匹配收入最小的人员信息":

自定义

如果不希望每次都写 merge 的各种参数,我们也可以自定义一个 vlookup 方法,把 merge 调用细节隐藏起来。

用上一个例子的数据。

"根据名字匹配信息,重复时,使用平价收入作为返回":

  • - 上图2个核心处理都直接使用自定义的方法
  • - 现在,已经不需要分组与连接表的知识,也能轻松得到复杂的匹配需求了

总结

  • - DataFrame.merge() ,2表连接
  • - 参数 on 指定匹配关键列
  • - 参数 validate 可对表关系进行验证
  • - 参数 how 可指定连接方式,常用的关系都有

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档