数据:
df = pd.DataFrame({'date':['客户在2016年6月12日交货',
'客户在2019年12月25日交货',
'客户在2020年1月19日交货',
'客户在2020年2月11日交货',
'客户在2020年2月16日交货'],
'money':[1.56, 2.04, 3.45, 10.10, 5.62]})
显示:
第一步:把 date 字段中的年月日信息 通过正则 取出来,并存成新字段 交货时间,但 交货时间 字段是list的格式
df['交货时间'] = df['date'].str.findall(r"(\d{4}年\d{1,2}月\d{1,2}日)")
显示:
第二步:把 交货时间 字段中的年月日 替换成英文格式的 '-' ,方便后面把时间转换后进行比较
def latestTime(dDate):
data01 = dDate['交货时间']
dataList = []
for f017v_data in data01:
f017v_data = f017v_data.replace('年', '-')
f017v_data = f017v_data.replace('月', '-')
f017v_data = f017v_data.replace('日', '-')
f017v_data = pd.to_datetime(f017v_data)
f017v_data = str(f017v_data)[0:10]
dataList.append(f017v_data)
dataList = dataList[0]
return dataList
df['交货时间'] = df.apply(latestTime, axis = 1)
显示:
第三步:把 交货日期 在距离今天 30日 内的数据 通过新建字段 bool中标记为1,最后只取 bool 字段为1的记录即可,这样 就会在这30天内每天都进行交货相关信息的提醒。
注:今天是 2020年1月15日
today = pd.datetime.now()
def dfApply(d):
d = datetime.datetime.strptime(d, '%Y-%m-%d')
theDay = today + dateutil.relativedelta(days = 30)
if d <= theDay and d >= today:
return 1
else:
return 0
df['bool'] = df['交货时间'].apply(dfApply)
df = df[df['bool'].isin([1])] # 只取bool值为1 的记录
df.drop(df[['bool', '交货时间']], axis = 1, inplace = True) # 删除字段 bool 和 交货时间
df.to_csv('df.csv', encoding = 'utf-8-sig', index = None) # 保存为csv格式,且不存 行号
显示: