Невозможно преобразовать данные времени этого столбца (объект во время) - PullRequest
1 голос
/ 27 февраля 2020

У меня есть типы данных фрейма данных, как показано ниже

    usr_id  year
0   t961    00:50:03.158000
1   t964    03:25:57
2   t335    00:55:00
3   t829    00:04:25.714000


usr_id    object
year      object
dtype: object

Я хочу преобразовать тип данных столбца года в дату и время. Я использовал приведенный ниже код.

timefmt = "%H:%M"
test['year'] = pd.to_datetime(
    test['year'], format=timefmt, errors='coerce').dt.time

Я получаю значение ниже

    usr_id  year
0   t961    NaT
1   t964    NaT
2   t335    NaT
3   t829    NaT

Как преобразовать время данных этого столбца (объект в datetime)? Как я могу отбросить секунды и микросекунды?

Ожидаемый результат

    usr_id   year
0   t961    00:50
1   t964    03:25
2   t335    00:55
3   t829    00:04

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Используйте to_datetime с Series.dt.strftime:

timefmt = "%H:%M"
test['year'] = pd.to_datetime(test['year'], errors='coerce').dt.strftime(timefmt)

print (test)
  usr_id   year
0   t961  00:50
1   t964  03:25
2   t335  00:55
3   t829  00:04

Или вы можете использовать Series.str.rsplit с n=1 для разделения по последним : и выбора первых списков с помощью индексации:

test['year'] = test['year'].str.rsplit(':', n=1).str[0]
print (test)
  usr_id   year
0   t961  00:50
1   t964  03:25
2   t335  00:55
3   t829  00:04

Или решение @Akira:

test['year'] = test['year'].astype(str).str[:5] 
0 голосов
/ 27 февраля 2020

Поскольку в вашем столбце year нет фактической даты, вам нужно установить значение по умолчанию. Затем вы можете передать формат функции pandas to_datetime.

Это можно сделать в виде одной строки:

test['year'] = pd.to_datetime(test['year'].apply(lambda x: '1900-01-01 '+ x),format='%Y-%m-%d %H:%M:%S')
...