从数据中提取日,月,年,小时,工作日,day_month_year,然后放入列中
数据列:
+----------------------+
| Date |
+----------------------+
| '11/28/17 00:36 ' |
| '11/28/17 01:15 AM' |
| 'abc' |
| 11/28/17 01:28 ' |
| 'pqr' |
+----------------------+
目标:
+-----+-------+------+---------+------+-----------------+
| Day | Month | Year | Weekday | Hour | Day_month_year |
+-----+-------+------+---------+------+-----------------+
| 28 | Nov | 2017 | Tue | 00 | 2017-11-28 |
| 28 | Nov | 2017 | Tue | 01 | 2017-11-28 |
| Nan | Nan | Nan | Nan | Nan | Nan |
| 28 | Nov | 2017 | Tue | 01 | 2017-11-28 |
| Nan | Nan | Nan | Nan | Nan | Nan |
+-----+-------+------+---------+------+-----------------+
代码:
df['datetime'] = pd.to_datetime(df['Date'],infer_datetime_format=True,errors='coerce')
df['Day'] = df['datetime'].dt.strftime('%d')
df['Month'] = df['datetime'].dt.strftime('%b')
df['Year'] = df['datetime'].dt.strftime('%Y')
df['WeekDay'] = df['datetime'].dt.strftime('%a')
df['Hour'] = df['datetime'].dt.strftime('%H')
df['Day_month_year'] = pd.to_datetime(df['datetime']).dt.to_period('D')
这些代码行需要很长时间,因为我的Date列没有特定的数据格式,并且有很少的值无法解析为datetime。我的“日期”列有近4万条记录,有没有一种更快的方法来执行此操作。
答案 0 :(得分:1)
使用pd.to_datetime
:
s = pd.to_datetime(df['Date'], errors='coerce')
df['Day'] = s.dt.day
df['Month'] = s.dt.month
df['Year'] = s.dt.year
df['Weekday'] = s.dt.strftime('%a')
df['Hour'] = s.dt.hour
df['Day_Month_Year'] = s.dt.date
输出:
Date Day Month Year Weekday Hour Day_Month_Year
0 11/28/17 00:36 28.0 11.0 2017.0 Tue 0.0 2017-11-28
1 11/28/17 01:15 AM 28.0 11.0 2017.0 Tue 1.0 2017-11-28
2 abc NaN NaN NaN NaT NaN NaT
3 11/28/17 01:28 28.0 11.0 2017.0 Tue 1.0 2017-11-28
4 pqr NaN NaN NaN NaT NaN NaT
列必须转换为浮点数,因为它们必须处理NaN
。它们很容易转换为int
。