ro如何将字符串转为timedelta类型

How ro convert a string to timedelta type

我有一个列 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

我不知道为什么它不转换字符串?谁能帮忙或现在如何解决这个问题? 谢谢!

我觉得这里有必要to_datetime, so is possible add minutes, e.g. with 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

编辑: 对于时间增量,删除日期并仅转换时间字符串:

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

您应该使用 to_datetime 而不是 (docs),然后用另一个日期时间计算时间增量。

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

您的字符串不在 timedelta format 中,因此您无法将其转换为一个。

Timedeltas 是时间的绝对差异,以差异单位(例如天、小时、分钟、秒)表示。此方法将参数从可识别的 timedelta 格式/值转换为 Timedelta 类型。