盘点一个Python自动化办公实战案例(四)
off999 2024-10-01 13:57 31 浏览 0 评论
大家好,我是皮皮。
一、前言
前几天在Python最强王者交流群【钟爱一生】问了一个Python自动化办公的问题,一起来看看吧。
【温馨提示】
遇到表达不清的,能稍微描述下,想要达成的结果吗?在excel上,或者画图也行。最好是把你想要的结果展示在excel中,另外,你展示的这个表格最好做个小的demo发上来,不要让大佬们再手动创建原始数据。实在不行,你就自己录制视频,或者发语音在群里提问都可以。
言归正传,一起来看看。上一篇文章中发生了一个小插曲,不过问题不大,结果总归是好的,玩归玩,闹归闹,别拿学习开玩笑。
二、实现过程
这里【小小明】大佬发问:对于昨天这个问题,我希望征求一下大家的意见,就是如果我们希望消除所有循环,对于下面的写法是否具有更简化的方案。
这里有个小插曲,昨天的时候【吴超建】偶然间问到明佬的这个代码中,是否可以消除for循环,然后这里就有了如上提问。
代码如下:
import pandas as pd
df = pd.read_excel("替换.xlsx")
ionp = df[df.编号.str.startswith("IONP")]
rule = "[一二三]工厂半成品"
chg = df[df.入库.str.fullmatch(rule) & df.出库.str.fullmatch(rule)]
t = chg.reset_index(names="idx").merge(ionp, left_on=["物料代码", "入库"], right_on=[
"物料代码", "出库"], suffixes=("", "_y"))
df.loc[t.idx, "入库"] = t.入库_y.values
df
merge确实会导致索引丢失,所以只能通过重置索引来保留原有位置。
后来针对该问题,【隔壁山楂】也给出了自己的看法:我自认为更简化的方案就是直接查找,两两匹配对应替换,下方代码在我之前代码中修改了部分。
代码如下:
import pandas as pd
df = pd.read_excel('替换.xlsx')
# 1、找到【入库】和【出库】都包合一工厂、二工厂、三工厂半成品的记录
compile = r'[一二三]工厂半成品'
query_code = df.loc[df['入库'].str.fullmatch(compile) & df['出库'].str.fullmatch(compile), ['物料代码', '入库']]
# 2、根据上一查找结果的物料代码,找到当前需要替换的入库信息等于IONP出库信息的记录
ionp = df.loc[(df['物料代码'] + df['出库']).isin(query_code.agg(''.join, axis=1)) & df['编号'].str.startswith('IONP')].set_index('物料代码')['入库']
# 3、替换,将需要替换的记录变更为IONP的入库信息
df.loc[query_code.index, '入库'] = query_code['物料代码'].replace(ionp)
df
两位大佬隔空论道,读者们受益颇丰。这里也顺便回答了另外一个粉丝的小提问。
【小小明】:拼合确实可以,但是merge的代码是否有办法继续简化吗?
【隔壁山楂】:这个merge已经是一行了,目前我没有特别好的方法,能想到的就是换种思路,因为在这里就是需要跟踪到被替换的位置。由于merge会重置索引,而目前这些做法中就是确保索引在每一步变换过程中不会发生变化,所以使用merge时若担心索引重置就需要自行先重置下,保证在merge前后需要替换的索引没有变化。
【小小明】:那看来merge已经没有优化空间了,参考你的拼合法,又写了一下:
import pandas as pd
df = pd.read_excel("替换.xlsx")
ionp = df.loc[df.编号.str.startswith("IONP"), ['物料代码', '入库', '出库']]
ionp = ionp.set_index(ionp.物料代码 + ionp.出库).入库
rule = "[一二三]工厂半成品"
chg = df.loc[df.入库.str.fullmatch(
rule) & df.出库.str.fullmatch(rule), ['物料代码', '入库']].agg(''.join, axis=1)
df.loc[chg.index, "入库"] = chg.replace(ionp)
df
守得云开见月明。
至此,粉丝【钟爱一生】提出的问题告一段落,真是一段艰辛的答疑。
三、总结
大家好,我是皮皮。这篇文章主要盘点了一个Python自动化办公的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【钟爱一生】提出的问题,感谢【瑜亮老师】、【隔壁山楂】、【小小明】、【黑科技·鼓包】、【猫药师Kelly】、【东哥】给出的思路,感谢【莫生气】、【冯诚】等人参与学习交流。
【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。
相关推荐
- winxp系统版本(winxp 版本)
-
1、微软官方3个版本:WINDOWSXPHOME(家庭版)、Professional(专业版)、MediaCenter2005(媒体中心版),每个版本的功能不一样。使用最多的是Professional...
- 打印机无法共享怎么回事(打印机无法共享出去)
-
共享打印机无法打印原因一:可能是由于病毒死机解决方法:确定是否由于病毒死机,找一张干净(确信无病毒)的系统盘,从A驱动舒上启动电脑,检查此时打印机和主机能否联机。如果正常联机,估计这种故障是由攻击硬件...
- ipv6无网络访问权限怎么解决
-
ipv6无网络访问权限解决方法如下1、点击电脑左下角的开始,进入到开始的菜单栏,在菜单栏中找到“运行”。或者通过快捷键Windows+R打开运行窗口。 2、打开运行的窗口页面后,在页面上输入“CMD...
- office ltsc版(Office LTSC版本区别)
-
office2021和2021ltsc的区别如下:1.更新策略不同。前者采用每个月月度更新的方法,提供功能更新、安全更新。后者不采用每个月月度更新的方法,且不提供功能更新。2.界面不同。2021采用了...
- 安装win7需要激活吗(现在安装win7旗舰版还需密钥吗)
-
要激活 Windows7如果是预装在计算机中的,买来之后便不用激活,这里预装指的是在厂商那里。正版的Windows7安装到计算机中,有三十天的试用期,若要永久使用,就要使...
- originos 3升级计划公布(originos升级包)
-
2023年2月。1.OriginOS3.0系统第一批升级时间为11月25日。2、包含iQOONeo7,X80系列,S15系列,iQOO9、iQOO10系列,以及折叠屏XFold系列和大屏XNo...
- 鸿蒙系统适配第三方机型(鸿蒙 第三方适配)
-
最新华为官方公布了鸿蒙系统3.0支持的机型名单,具体如下。鸿蒙系统3.0升级名单:1.Mate系列:MateXs2、MateX2、MateXs、Mate40、Mate40Pro、Mate...
- imei怎么下载(imei changer apk)
-
如果您的steam序列号激活了,可以尝试以下方法下载:1.使用steam自带的下载工具,如“下载工具”,在软件的“下载”选项卡中选择“序列号下载”。2.在下载页面中,选择要下载的游戏,然后点击“下...
- 电脑系统优化软件哪个好(系统优化软件排行榜)
-
有必要用,非常好用,WINDOWS优化大师是一个网络上下载率极高的系统维护软件。多年未曾清理过系统和硬盘的电脑,系统内部将产生大量的垃圾文件、临时文件、废旧程序等等win10系统不需要经常更新,关闭...
- 重装系统后硬盘不见了(重装系统后磁盘不见了)
-
硬盘不见可能是因为重装系统时未正确安装驱动程序或未对硬件进行正确设置。你可以按以下步骤排查问题:进入BIOS检查硬盘是否被识别,尝试重新连接数据线和电源线,更新或安装适当的硬件驱动程序,或者使用硬件故...
- 冰封u盘装win7系统教程图解(冰封u盘启动装机教程)
-
1.查找激活工具:通常来说,Win7冰封系统已经包含了必要的驱动,所以如果你的电脑上并没有出现设备错误,那你就可以正常使用。如果你需要添加任何驱动,请尝试从厂商下载相应的驱动并执行自动安装程序。如果...
- uefi模式下找不到硬盘(uefi引导找不到硬盘)
-
首先你的安装盘必须是从UEFI启动的,然后它才能安装为UEFI启动。(条件:Fat32文件系统,efi文件夹)其次你MBR+BIOS的系统想换成GPT+EFI的,分区得做一点改动,腾出来100M的空...
- win7怎么安装蓝牙驱动程序(win7电脑安装蓝牙驱动教程)
-
方法如下: 1、再开始里点击控制版面,点击【硬件和声音】找到【添加设备】 2、之后再选择你要添加的蓝牙耳机。 3、系统就会提示正在与蓝牙适配器连接,然后提示添加成功。 4、点击“开始”-“...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
