时间轴处理的一些想法

第一种,转换时间戳,然后加减的

# datetime对象转换成时间字符串
datetime_str = datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')
print(datetime_str)
 
# datetime对象转换成时间戳
datetime_stamp = datetime.timestamp(datetime.now())
print(datetime_stamp)

# 时间字符串转datetime对象,再转时间戳
datetime_stamp2 = datetime.timestamp(datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S'))
print(datetime_stamp2)

# 时间戳转datetime对象,再转时间字符串
datetime_str2 = datetime.strftime(datetime.fromtimestamp(datetime_stamp2), '%Y-%m-%d %H:%M:%S')
print(datetime_str2)

转换时间戳之后,直接根据一天是86400,根据自己的需求计算就可以

第二种,直接调用pandas内置函数

from dateutil.relativedelta import relativedelta
A = datetime.datetime(2019,1,1)
A = A - relativedelta(months=+2,days=-3)
A.strftime("%Y-%m-%d")

这种方式相对第一种简单粗暴,运算起来也比较方便,转化的时候不用考虑大小月,会自动判断

from dateutil.relativedelta import relativedelta
data['前1个月的账单日'] = data['新账单日'].apply(lambda x:x - relativedelta(months=+1))
data_1M = data.query('etl_date > 前1个月的账单日 and etl_date < 新账单日')

一个转换生成和最近一个月的时间跨度,然后提取出来这个时间段的数据,当然事假的跨度可以根据自己的去选择,这里之所以用了apply,landba:x 因为转了时间格式之后还是会显示格式不匹配,但是用apply,lambda:x会导致运行速度下降,再加上如果你要使用循环,比如取6个月就需要转换6次,数据量大的话大概需要20分钟,对于数据的及时处理很不方便.

第三种

from dateutil.relativedelta import relativedelta
for age_ in range(configs['history_period']):
    history_C["history"+"_"+str(age_)] = pd.to_datetime(history_C['mob0'])-pd.DateOffset(months=age_)

这里的[mob0]可以理解为现在的时间,age_是历史期数,就可以算出来每一个月的时间点数据,对于总结每个月的历史数据,效率还是挺高的,我自己 跑的时候,数据量比较大,第二种方法在configs[‘history_period’]=6和12时,20分钟,30多分钟左右,然而第三种方法就用了不到3分钟和5分钟左右,当然其中还有其他简单的加减乘除,不过主要是apply,lanmbda使速度慢了很多,(线上部署,速度越快越好.)

好了,今天就简单写了一下自己遇到的问题,想到的一些方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值