ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3044|回复: 11

[分享] [ Excel-Python ] -5:用 Python 实现 Excel 的 VLookup 功能

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-6-7 12:03 | 显示全部楼层 |阅读模式
本帖最后由 Hi-Frank 于 2021-6-9 17:17 编辑



用 Python 实现 Excel 的 VLookup 功能



0. 引子

在高铁上,看着祖国大好河山,利用闲暇再来一篇。

image.jpg

在高铁上嘛,就来一篇我们 Excel 圈高大上的 : VLOOKUP



1. 案例说明

还是上一帖的例子。那个有 订单、价格表、供应商 三个 Sheet 的 Excel 文件,如下:

image.jpg

如果要在订单中显示单价,需要 VLookup:
  1. =VLOOKUP(B2,价格表!$A$1:$C$7,3)
复制代码

我们还可以继续 VLookup,把供应商也查出来,最终结果如下:

image.png




2. Python 实现

在 Python 中,和 VLookup 对应的,是一条非常简单的语句,merge()

首先,我们先把这个工作簿中的数据都读过来,放到 Pandas 的 DataFrame 里,分别是 df1, df2, df3:

  1. df1 = pd.read_excel(r'd:\demo\orders2.xlsx', sheet_name='订单')
  2. df2 = pd.read_excel(r'd:\demo\orders2.xlsx', sheet_name='价格表')
  3. df3 = pd.read_excel(r'd:\demo\orders2.xlsx', sheet_name='供应商')
复制代码


然后,我们用 pandas 的 merge() 方法,通过“型号”列,把相关的值读过来:
  1. df4 = df1.merge(df2, on='型号')
复制代码

结果如下:
image.png

简单吧,就这一句: df4 = df1.merge(df2, on='型号')

意思就是,把 df2 以“型号”列为依据,与 df1 合并,得到 df4.

我们还可以再来一句,把供应商也读过来:
  1. df5 = df4.merge(df3, on='产品')
复制代码
结果如下:
image.png

如上,在 df5 中,就得到了上面我们两遍 VLookup 后得到的结果。



3. 更多问题

事情总没有那么简单。每次想着写个短帖子,总会写一堆长篇大论。

比如,这句  df4 = df1.merge(df2, on='型号') ,是因为两个表的这一列都叫“型号”。如果列名不一样呢?

假设这一列,在 订单表 df1 中叫“型号”,在 价格表 df2 中叫 “规格”,那么,语法如下:

  1. df4 = df1.merge(df2, left_on='型号', right_on='规格')
复制代码
image.png


同样,如果 订单表 df1 中的 “产品”,在 供应商表中叫 “商品”,则语法为:

  1. df5 = df4.merge(df3, left_on='产品', right_on='商品')
复制代码


image.png




n. 更多更多问题

   问题越来越多啊:

   - 上面的结果中,有多余的列,怎么办?
   - 怎么只显示需要的列?按需要的顺序显示?
   - 如何做计算的列,例如每一行的单价乘数量的小计?合计呢?

   - 如何自定义列名?

   - 如何把这个结果存回 Excel 文件?或者存入新的文件?

   -  ......

     
    吾生也有涯,而知也无涯。以有涯随无涯,殆已!
    搞这么累干嘛?
    趁着还有牙,去吃小龙虾喝啤酒吧。

    以上问题,我慢慢讲,不要怕,反正学的越多,问题越多  ......

    最后,附上本贴 Demo 的 Jupyter Notebook 文件 和 Excel 文件,供参考。
  
—— HiFrank  我跑,故我在!




<<< 上一讲:[ Excel-Python ] -4:用 Python 读取 Excel 工作表
http://club.excelhome.net/thread-1587723-1-1.html

下一讲:>>>
[ Excel-Python ] -6:如何用 Python 把数据写入 Excel 文件
http://club.excelhome.net/thread-1588032-1-1.html







VLookupDemo.zip

21.86 KB, 下载次数: 23

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-7 12:18 | 显示全部楼层
不好意思,这一篇还没写完呢。
在高铁上,电话会议进来。保存了草稿,怎么就给发布了?
所以是个半截子。不过主要内容已经有了。
明天再写个 VLookup 之二吧

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-6-8 17:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本贴没写完的继续在1楼编辑呵,别乱了队形

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-8 18:04 | 显示全部楼层
xlgw521 发表于 2021-6-8 17:54
本贴没写完的继续在1楼编辑呵,别乱了队形

懂了懂了,
看到了看到了,
专业专业,
谢了谢了
.
我去跑个10公里,回来接着写
今晚完成任务


.

TA的精华主题

TA的得分主题

发表于 2021-6-8 20:03 来自手机 | 显示全部楼层
Hi-Frank 发表于 2021-6-8 18:04
懂了懂了,
看到了看到了,
专业专业,

楼主,等更……

TA的精华主题

TA的得分主题

发表于 2021-6-8 21:44 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-8 22:42 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-8 22:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-6-8 23:13 | 显示全部楼层
Hi-Frank 发表于 2021-6-7 12:18
不好意思,这一篇还没写完呢。
在高铁上,电话会议进来。保存了草稿,怎么就给发布了?
所以是个半截子。 ...

暂时不写之二了,我直接在本帖上编辑了。
.

TA的精华主题

TA的得分主题

发表于 2021-6-10 19:14 | 显示全部楼层
楼主,不用大熊猫可以吗?我有pycharm,我PY看了100集不会VLOOKUP,这个pycharm我也不会使,不知道怎么弄进表格里
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-2 22:35 , Processed in 0.060411 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表