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]