之前在別的博客記過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函數的典型應用,。下面說一些細節(jié): 1.
1/17/07 has the format “%m/%d/%y” 17-1-2007 has the format “%d-%m-%Y”
2.原始時間數據是object類型的,這個object格式一般是python用來記錄可變化的兌現的格式,。這個格式它并不能認出是時間格式,,盡管我們一眼就能看出(人和機器的區(qū)別在此)。 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'])
一切盡在不言中~~我想從上面的截圖你應該明白怎么回事了~
|