python 工作实践 每日Excel运单数据匹配

问题描述:

每日公司导出Excel运单,需要人工匹配网点归属(借助归属表)、匹配时间(9:00-次日8:59:59为一个工作日)、匹配结算重量所属公斤段等,以上匹配均可用Excel→Vlookup精确或模糊匹配实现。

本人为摆脱双手特撸以下代码:


import numpy as np
import pandas as pd
import datetime
import os

#工作路径
path_desktop = os.chdir('C:/Users/Administrator/Desktop/')
work_path = 'C:/Users/Administrator/Desktop/luban_data/'
for root,dirs,files in os.walk(work_path):
    for file in files:
        YunDan_path = os.path.join(work_path,file)
        print('文件路径:',YunDan_path)

#功能函数
def match_KG(data,col):#公斤段匹配
    x = data[col]
    bins = [0,35,70,300,500,800,1500,999999999]
    labels = ['a.35KG以下','b.35-70','c.70-300','d.300-500','e.500-800','f.800-1500','g.1500以上']
    #pd.cut(x,bins,right=True,labels=labels,retbins=False)
    GongJinDuan_cut = pd.cut(x,bins,right=True,labels=labels,retbins=False)
    data['公斤段'] = GongJinDuan_cut.values

def match_ANEtime(data,col):#日期转换,实现9:00:00-次日8:59:59为一天时间节点的匹配
    lst =[]
    for dt in data[col]:
        #标准化时间到凌晨零点,例:2018/9/10 00:00
        dt_nor = pd.Timestamp(dt.date())
        dt_delta = dt - dt_nor
        if dt_delta < datetime.timedelta(seconds=(3600*9)): 
            lst.append(dt_nor - datetime.timedelta(days=1))
        else:
            lst.append(dt_nor)
    ANEtime = pd.to_datetime(lst)
    data['月份'] = ANEtime.month
    data['日期'] = ANEtime.date
    return(data)

def match_QuYu(data,match_data,key_name):#大区片区省区长短线匹配
    data = pd.merge(data,match_data,on=key_name,how='left')
    return(data)

#读数据
YunDan = pd.read_excel(YunDan_path)
match_1 = pd.read_excel('C:/Users/Administrator/Desktop/匹配数据源.xlsx',sheet_name='大区片区匹配')
match_2 = pd.read_excel('C:/Users/Administrator/Desktop/匹配数据源.xlsx',sheet_name='省区长短线匹配')
match_3 = pd.read_excel('C:/Users/Administrator/Desktop/匹配数据源.xlsx',sheet_name='市场部调整')
match_3 = match_3['寄件所属一级网点']
print('已载入文件:',file)

#匹配数据
match_KG(YunDan,'结算重量')
match_ANEtime(YunDan,'寄件日期')
YunDan = match_QuYu(YunDan,match_1,'寄件所属一级网点')
YunDan = match_QuYu(YunDan,match_2,'派件所属分拨中心')

#修改市场部过渡期货量类型
YunDan.loc[YunDan['寄件所属一级网点'].isin(match_3),'货量类型'] = '市场'

#输出结果
#print(YunDan.head())

#修改生成Excel文件中列的顺序
columns = ['月份','日期','寄件日期','运单号','货量类型','寄件网点','寄件所属一级网点',
'寄件所属分拨中心','片区','大区','目的网点','派件所属一级网点','派件所属分拨中心',
'省区','长短线','产品类型','结算重量','公斤段','件数','物品名称','实际重量','体积']
YunDan.to_excel('中心运单.xlsx',index=False,columns=columns)

print('文件已生成')
print('END')

猜你喜欢

转载自blog.csdn.net/weixin_36768272/article/details/82455054