首页 > 解决方案 > 如何将字符串转换为 timedelta 类型

问题描述

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

我不确定为什么它不转换字符串?任何人都可以帮助或现在如何解决这个问题?谢谢!

标签: pythonpandastimedelta

解决方案


我认为这里是必要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

推荐阅读