execel pandas 减少复制黏贴的代码行 自动匹配单号
Posted 走python的路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了execel pandas 减少复制黏贴的代码行 自动匹配单号相关的知识,希望对你有一定的参考价值。
每天工作的任务之一,就是上传单号到客户网站,完成订单的最后一步。
客户网站支持批量上传单号,这里批量上传要按照客户网站规定的模板去做。
模板里头包括【 订单号,商品编码,承运商,物流单号,发货时间,备注】这些列
这些信息分散在两个表格里头,客户网站导出的订单表 里头包括有 订单号,商品编码。 我司网站下单系统 导出的表格 里头有 订单号,ERP编码,承运商,物流单号,发货时间。
需要将两个表按照 订单号 和 商品号 做一个 连接。
用Excel 来做得话,用Vlookup做匹配就可以了,但是有一个很恶心的bug就是,公司的计算机性能呢,非常差,Excel公式拉下去的时候 经常出现一些莫名其妙的问题。公式拉倒一半,公式变文本了,公式拉出来,计算一半 就扔在那里了。坑了不是一次两次了。
现在尝试用pandas来做,希望可以减少半硬件半人为因素导致的bug。代码如下:
import pandas as pd import time # 汇总工作簿中的表 我司 下单系统 导出的表 数量超过6000以后 会自动分配到新的sheet页,所以导出后 需要先做一个汇总 f = pd.ExcelFile(r\'C:\\Users\\Administrator\\Desktop\\订单数据 (2).xlsx\') data = pd.DataFrame() for i in f.sheet_names: d = pd.read_excel(r\'C:\\Users\\Administrator\\Desktop\\订单数据 (2).xlsx\', sheet_name=i,dtype=str) data = pd.concat([data, d]) # 提取工作簿中所需信息 df = data[[\'外部编码\',\'创建时间\',\'单据类型\',\'ERP编码\',\'订单状态\',\'承运商\', \'快递单号\',\'发货时间\']] # 筛选 单据类型不为备货订单,订单状态不为已取消的数据行 df = df.loc[df[\'单据类型\'] != \'备货订单\'] df = df.loc[df[\'订单状态\'] != \'已取消\'] # 匹配ERP编码 --- 合同号 df_erp = pd.read_excel(r\'产品-下单细节-4.15.xlsx\',sheet_name=\'erp汇总\',dtype=str) df1 = df.merge(df_erp[[\'ERP编码\',\'序号\']],how=\'left\',on=\'ERP编码\') # 重命名列 df1.rename(columns = {\'序号\':\'合同号\'}, inplace = True) # 增加一列 做匹配 df1[\'匹配号\'] = df1[\'外部编码\']+df1[\'合同号\'] print(df1.shape) # 匹配单号 df_order = pd.read_excel(r\'线上订单汇总20210619 144253.xlsx\',dtype =str) # 增加一列 做匹配 df_order[\'匹配号\'] = df_order[\'订单编号\']+df_order[\'合同序号\'] # 订单表 匹配 我司下单系统单号 df_dh = df_order.merge(df1,how = \'left\',on=\'匹配号\',suffixes=(\'\', \'_y\')) # 导出带单号的订单表 time_now = time.strftime("%Y%m%d",time.localtime()) df_dh.to_excel(r\'单号 %s.xlsx\' %time_now,index=False)
还是减轻了很多复制黏贴的工作的:
1. 在汇总excel 工作簿中的工作表 这个步骤里头,就可以省下好多次复制黏贴的工作
2. 代码的好处就是,写一次代码,后面一键调用,交给计算机自运算即可,比人为手动操作的好处在于,人会犯错,计算机不会。
3. 当然也还是需要有一个好的计算机,计算机性能不行的话,数据量大的时候,内存扛不住,程序也运行不起来。
当然最好的办法 是打通客户网站 和我司的下单系统呢,但是现实中总是有这样那样的原因,让技术无用武之地。所以现在呢,还是手动操作,两边导进去,导出来。
以上是关于execel pandas 减少复制黏贴的代码行 自动匹配单号的主要内容,如果未能解决你的问题,请参考以下文章