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. 当然也还是需要有一个好的计算机,计算机性能不行的话,数据量大的时候,内存扛不住,程序也运行不起来。
当然最好的办法 是打通客户网站 和我司的下单系统呢,但是现实中总是有这样那样的原因,让技术无用武之地。所以现在呢,还是手动操作,两边导进去,导出来。