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