关于日期特征,你想知道操作都在这儿~

今日锦囊

特征锦囊:关于日期特征,你想知道操作都在这儿~

???? Index
  • 字符串转日期

  • 日期转字符串

  • 13位的时间戳转 日期格式str

  • 13位的时间戳转datetime

  • 10位的时间戳转 日期格式str

  • 10位的时间戳转datetime

  • 提取月的总天数

  • 获取前一天日期

  • 获取今天日期

  • 提取日期实体

  • 日期差计算(天)

  • 日期差计算(小时)

我们做模型经常会遇到很多日期的操作,比如我们要把导入的原始数据里的日期做一下预处理,把该转的类型给转了,把该要提取的信息给提取出来。今天,这篇锦囊就是把这些相关日期的操作给罗列了一下,希望大家看了有一定的帮助~

在开始之前,我们需要先导入一些常用的库包以及捏造一些测试数据。

# 导入相关库包
import pandas as pd
import numpy as np
import datetime
import time
import random
from calendar import monthrange 

# 捏造数据
df = pd.DataFrame(
      [[1, 1508212054157,'1993-11-03'],
       [2, 1507029571478,'1993-11-04'],
       [3, 1508211513583,'1993-10-03'],
       [4, 1507029532200,'1993-02-03'],
       [5, 1507029671831,'1993-06-20']
      ]
      ,columns=['user_id','timestamp13','date'])

# 捏造 10位的 时间戳
df['timestamp10'] = df['user_id'].apply(lambda x:int(time.time()-10000*x))

df.head()

字符串转日期 ????
# 字符串转日期
df['datetime64'] = pd.to_datetime(df['date'])
日期转字符串 ????
# 日期转字符串
df['date_str'] = df['datetime64'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
13位的时间戳转 日期格式str ????
# 13位的时间戳转 日期格式str
df['timestamp13_to_datetime'] = df['timestamp13'].apply(lambda x: \
                                                        time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(x/1000)))
13位的时间戳转datetime ????
# 13位的时间戳转datetime
df['timestamp13_to_datetime2'] = pd.to_datetime(df['timestamp13_to_datetime'])
10位的时间戳转 日期格式str ????
# 10位的时间戳转 日期格式str
df['timestamp10_to_datetime'] = df['timestamp10'].apply(lambda x: \
                                                        time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(x)))
10位的时间戳转datetime ????
# 10位的时间戳转datetime
df['timestamp10_to_datetime2'] = pd.to_datetime(df['timestamp10_to_datetime'])
提取月的总天数 ????
# 提取月的总天数
def extract_month_range(year, month):
    '''提取这个月的总天数'''
    first_day_of_month, days_in_a_month = monthrange(int(year), int(month))
    return days_in_a_month
df['days_in_a_month'] = df.apply(lambda x: extract_month_range(x['year'], x['month']), axis=1)
获取前一天日期 ????
# 获取前一天日期
df['yesterday'] = df['datetime64'] - datetime.timedelta(days=1)
获取今天日期 ????
# 获取今天日期
df['today'] = datetime.date.today()
提取日期实体 ????
# 提取日期实体
df['day'] = df['datetime64'].dt.day #天
df['weekday'] = df['datetime64'].dt.weekday #周
df['month'] = df['datetime64'].dt.month #月
df['year'] = df['datetime64'].dt.year #年
日期差计算(天) ????
# 日期差计算(天)
df['day_dif'] = (df['datetime64'] - df['yesterday']).dt.days
日期差计算(小时) ????
# 日期差计算(小时)
df['hour_dif'] = (df['datetime64'] - df['yesterday']).values/np.timedelta64(1, 'h') # 换成 D 则为 天

当我们跑完了上面的代码,就会得到下面的结果集:

今天的分享就到这里啦~感谢阅读!

往 期 锦 囊

特征锦囊:特征无量纲化的常见操作方法

特征锦囊:怎么进行多项式or对数的数据变换?

特征锦囊:常用的统计图在Python里怎么画?

特征锦囊:怎么去除DataFrame里的缺失值?

特征锦囊:怎么把被错误填充的缺失值还原?

特征锦囊:怎么定义一个方法去填充分类变量的空值?

特征锦囊:怎么定义一个方法去填充数值变量的空值?

特征锦囊:怎么把几个图表一起在同一张图上显示?

特征锦囊:怎么把画出堆积图来看占比关系?

特征锦囊:怎么对满足某种条件的变量修改其变量值?

特征锦囊:怎么通过正则提取字符串里的指定内容?

特征锦囊:如何利用字典批量修改变量值?

特征锦囊:如何对类别变量进行独热编码?

特征锦囊:如何把“年龄”字段按照我们的阈值分段?

特征锦囊:如何使用sklearn的多项式来衍生更多的变量?

特征锦囊:如何根据变量相关性画出热力图?

特征锦囊:如何把分布修正为类正态分布?

特征锦囊:怎么找出数据集中有数据倾斜的特征?

特征锦囊:怎么尽可能地修正数据倾斜的特征?

特征锦囊:怎么简单使用PCA来划分数据且可视化呢?

特征锦囊:怎么简单使用LDA来划分数据且可视化呢?

特征锦囊:怎么来管理我们的建模项目文件?

特征锦囊:怎么批量把特征中的离群点给“安排一下”?

特征锦囊:彻底了解一下WOE和IV

特征锦囊:一文介绍特征工程里的卡方分箱,附代码实现

特征锦囊:今天一起搞懂机器学习里的L1与L2正则化

特征锦囊:金融风控里的WOE前的分箱一定要单调吗?

特征锦囊:如何在Python中处理不平衡数据

特征锦囊:这份数据清洗checklist,让开发过程更加高效

 ???? GitHub传送门 

https://github.com/Pysamlam/Tips-of-Feature-engineering

原创不易,如果觉得这种学习方式有用,希望可以帮忙随手转发or点下“在看”,这是对我的极大鼓励!阿里嘎多!????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值