Как ro преобразовать строку в тип timedelta - PullRequest
1 голос
/ 06 апреля 2020

У меня есть столбец evs['deur_open'], который выглядит следующим образом:

0                      NaN
1                      NaN
2                      NaN
3                      NaN
4       21-7-2012 17:30:00
               ...        
1196    10-6-2019 18:00:00
1197    10-6-2019 18:30:00
1198    11-6-2019 16:00:00
1199    13-6-2019 18:30:00
1200    16-6-2019 17:00:00

Это все строки. Я хотел бы преобразовать его в объект timedelta для выполнения некоторых операций, однако, когда я использую pd.to_timedelta(evs['deur_open'], errors='coerce'), он преобразует все значения в NaT, например:

1      NaT
2      NaT
3      NaT
4      NaT
        ..
1196   NaT
1197   NaT
1198   NaT
1199   NaT
1200   NaT

Я не уверен, почему это не конвертирует строки? Кто-нибудь может помочь или сейчас как это исправить? Спасибо!

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вместо этого следует использовать to_datetime ( документы ), а затем вычислять временную дельту с другой датой.

for dt in evs['deur_open']:
    pd.to_datetime(dt, format='%d-%m-%Y %h:%m%s', errors='coerce')

Строка не в формате timedelta , поэтому вы не можете преобразовать его в единицу.

Timedeltas - это абсолютные различия во времени, выраженные в единицах разницы (например, дни, часы, минуты, секунды). Этот метод преобразует аргумент из распознанного формата / значения timedelta в тип Timedelta.

1 голос
/ 06 апреля 2020

Я думаю, что здесь необходимо to_datetime, поэтому можно добавить minutes, например, с Timedelta:

evs['deur_open'] = pd.to_datetime(evs['deur_open'], errors='coerce', dayfirst=True)

evs['new'] = evs['deur_open'] + pd.Timedelta(90 * 60, unit='s')
print (evs)
               deur_open                 new
0                    NaT                 NaT
1                    NaT                 NaT
2                    NaT                 NaT
3                    NaT                 NaT
4    2012-07-21 17:30:00 2012-07-21 19:00:00
1196 2019-06-10 18:00:00 2019-06-10 19:30:00
1197 2019-06-10 18:30:00 2019-06-10 20:00:00
1198 2019-06-11 16:00:00 2019-06-11 17:30:00
1199 2019-06-13 18:30:00 2019-06-13 20:00:00
1200 2019-06-16 17:00:00 2019-06-16 18:30:00

РЕДАКТИРОВАТЬ: Для timedeltas по временам удалить даты и преобразовать только строки времени:

evs['deur_open'] = pd.to_timedelta(evs['deur_open'].str.split().str[1], errors='coerce')
print (evs)
     deur_open
0          NaT
1          NaT
2          NaT
3          NaT
4     17:30:00
1196  18:00:00
1197  18:30:00
1198  16:00:00
1199  18:30:00
1200  17:00:00
...