之前在别的博客记过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等可参考官网:  http://pandas./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
其实上面两种是一样的。  说明:
import pandas as pd
a = pd.Series(['2017-1-2','2017-9-1'])
  一切尽在不言中~~我想从上面的截图你应该明白怎么回事了~
|