Pandas - преобразовать строки во время без даты
Я прочитал множество ответов SO, но не могу найти четкое решение.
У меня есть эти данные в df, называемом day1
, который представляет часы:
1 10:53
2 12:17
3 14:46
4 16:36
5 18:39
6 20:31
7 22:28
Name: time, dtype: object>
Я хочу преобразовать его в формат времени. Но когда я это делаю:
day1.time = pd.to_datetime(day1.time, format='H%:M%')
Результат включает сегодня дату:
1 2015-09-03 10:53:00
2 2015-09-03 12:17:00
3 2015-09-03 14:46:00
4 2015-09-03 16:36:00
5 2015-09-03 18:39:00
6 2015-09-03 20:31:00
7 2015-09-03 22:28:00
Name: time, dtype: datetime64[ns]>
Кажется, аргумент format
не работает - как мне получить время, как показано здесь без даты?
Обновление
Следующие форматы правильного времени, но каким-то образом столбец по-прежнему является типом объекта. Почему он не конвертируется в datetime64
?
day1['time'] = pd.to_datetime(day1['time'], format='%H:%M').dt.time
1 10:53:00
2 12:17:00
3 14:46:00
4 16:36:00
5 18:39:00
6 20:31:00
7 22:28:00
Name: time, dtype: object>
Ответы
Ответ 1
После выполнения преобразования вы можете использовать datetime accessor dt
для доступа к компоненту hour
или time
:
In [51]:
df['hour'] = pd.to_datetime(df['time'], format='%H:%M').dt.hour
df
Out[51]:
time hour
index
1 10:53 10
2 12:17 12
3 14:46 14
4 16:36 16
5 18:39 18
6 20:31 20
7 22:28 22
Также ваша строка форматирования H%:M%
неверна, она может поднять ValueError: ':' is a bad directive in format 'H%:M%'
Что касается вашего последнего комментария, dtype datetime.time
not datetime
:
In [53]:
df['time'].iloc[0]
Out[53]:
datetime.time(10, 53)
Ответ 2
Вы можете использовать to_timedelta
pd.to_timedelta(df+':00')
Out[353]:
1 10:53:00
2 12:17:00
3 14:46:00
4 16:36:00
5 18:39:00
6 20:31:00
7 22:28:00
Name: Time, dtype: timedelta64[ns]