首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点一个Python自动化办公实战案例(四)

砌下梨花一堆雪,明年谁此凭阑干。

大家好,我是皮皮。

一、前言

前几天在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自动化办公的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O3TVOKTKy1oVmd3-V9RFxmmg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券