Как правильно конвертировать datetime64 в hour?
Есть DataFrame (df). В нем колонка-признак - created в формате datetime64. В колонке записана дата - 2017-04-02 13:58:51. Когда извлекаю часы из даты вот так:
df['created_hour'] = df['created'].dt.hour
, то получаю значение 13. Хотя очевидно, что правильнее было бы записать 14, так как уже 58 минут. Но в лоб не получается это решить.
Как это можно реализовать?
Ответы (2 шт):
Пример:
In [61]: df
Out[61]:
user_id timestamp date
0 313 1491144981 2017-04-02 14:56:21
1 20 1491180276 2017-04-03 00:44:36
In [62]: df["created_hour"] = df["date"].dt.hour + df["date"].dt.minute.ge(30)
In [63]: df
Out[63]:
user_id timestamp date created_hour
0 313 1491144981 2017-04-02 14:56:21 15
1 20 1491180276 2017-04-03 00:44:36 1
но более идиоматично воспользоваться вариантом от @Anton Shchyrov
У объекта datetime есть метод round(), который округляет время до указанного параметра и возвращает новый объект datetime.
Список возможных параметров приведен здесь
- B business day frequency
- C custom business day frequency
- D calendar day frequency
- W weekly frequency
- M month end frequency
- SM semi-month end frequency (15th and end of month)
- BM business month end frequency
- CBM custom business month end frequency
- MS month start frequency
- SMS semi-month start frequency (1st and 15th)
- BMS business month start frequency
- CBMS custom business month start frequency
- Q quarter end frequency
- BQ business quarter end frequency
- QS quarter start frequency
- BQS business quarter start frequency
- A, Y year end frequency
- BA, BY business year end frequency
- AS, YS year start frequency
- BAS, BYS business year start frequency
- BH business hour frequency
- H hourly frequency
- T, min minutely frequency
- S secondly frequency
- L, ms milliseconds
- U, us microseconds
- N nanoseconds
Т.е. вам нужно текущий datetime округлить до часов (модификатор H), а затем у нового объекта запросить количество часов.
Итого:
df['created'].dt.round('H').dt.hour