python - 如何将字符串转换为 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
我不确定为什么它不转换字符串?任何人都可以帮助或现在如何解决这个问题?谢谢!
解决方案
我认为这里是必要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