datetime.dt.day以及to_datetime函数讲解(Python时序量汇总)

之前在别的博客记过pandas处理时间量的笔记,但是时间一长又忘了。。。所以决定另外写一篇记录下时序量的处理。

1.关于pandas的to_datetime函数的理解。

参考:https://blog.csdn.net/qq_36523839/article/details/79746977

df = pd.read_csv('../input/train.csv',parse_dates=["purchase_date"])

等价于:

df['purchase_date'] = pd.to_datetime(df['purchase_date'])

上面就是一个to_datetime函数的典型应用。下面说一些细节:
1.

1/17/07 has the format “%m/%d/%y”
17-1-2007 has the format “%d-%m-%Y”

2.原始时间数据是object类型的,这个object格式一般是python用来记录可变化的兑现的格式。这个格式它并不能认出是时间格式,尽管我们一眼就能看出(人和机器的区别在此)。
to_datetime之后就可以用神奇的pandas.Series.dt.day或者pandas.Series.dt.month等方法获取到真实数据了!
3.如果原始数据有的是1/17/07有的是17-1-2007的呢?
那么直接用上面的语句会报错的。应用:

data['date_parsed'] = pd.to_datetime(data['Date'],infer_datetime_format=True)

另外一种改错方式见上面链接。

2.关于datetime.dt.year等类型的理解

    df['purchase_date'] = pd.to_datetime(df['purchase_date'])
    df['year'] = df['purchase_date'].dt.year
    df['weekofyear'] = df['purchase_date'].dt.weekofyear
    df['month'] = df['purchase_date'].dt.month
    df['dayofweek'] = df['purchase_date'].dt.dayofweek
    df['weekend'] = (df.purchase_date.dt.weekday >=5).astype(int)
    df['hour'] = df['purchase_date'].dt.hour
df['purchase_date'] = pd.to_datetime(df['purchase_date'])

这一句完成了数据类型从object到datetime64的变化。之后
.dt.day等可参考官网:
datetime.dt.day以及to_datetime函数讲解(Python时序量汇总)_第1张图片
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.day.html#pandas-series-dt-day

3。关于时序量的做差等

train['elapsed_time'] = (datetime.date(2018, 2, 1) - train['first_active_month'].dt.date).dt.days

或者

df_hist_trans_group['new_hist_purchase_date_diff'] = 
(df_hist_trans_group['new_hist_purchase_date_max'] - 
df_hist_trans_group['new_hist_purchase_date_min']).dt.days

其实上面两种是一样的。
datetime.dt.day以及to_datetime函数讲解(Python时序量汇总)_第2张图片
说明:

import pandas as pd
a  = pd.Series(['2017-1-2','2017-9-1'])

datetime.dt.day以及to_datetime函数讲解(Python时序量汇总)_第3张图片
datetime.dt.day以及to_datetime函数讲解(Python时序量汇总)_第4张图片
一切尽在不言中~~我想从上面的截图你应该明白怎么回事了~

你可能感兴趣的:(Pandas)