问题描述:
每日公司导出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')