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. 当然也还是需要有一个好的计算机,计算机性能不行的话,数据量大的时候,内存扛不住,程序也运行不起来。

 

当然最好的办法 是打通客户网站 和我司的下单系统呢,但是现实中总是有这样那样的原因,让技术无用武之地。所以现在呢,还是手动操作,两边导进去,导出来。

上一篇:[leetcode/lintcode 题解] 算法面试真题详解:滑动拼图II


下一篇:[leetcode/lintcode 题解] 算法面试真题详解:一和零