提问人:Samovian 提问时间:9/4/2023 更新时间:9/4/2023 访问量:33
如何在 pandas to_datetime 中处理可选小时格式?
How to deal optionnal hour format in pandas to_datetime?
问:
我需要处理字符串的数据帧(顺便说一句,跑步过程),人们在一小时之前完成,因此它的格式为“%M:%S”,例如:“54:45”,有些人在 1 小时后完成,因此格式为“%H:%M:%S”,例如:“1:05:11”
这里有一些代码要测试:
df = pd.DataFrame({'time': ['1:01:16','1:05:11','1:08:43','1:03:30','57:43']})
pandas 不喜欢混合格式并告诉我这个错误:
df['time'] = pd.to_datetime(df['time'],format='%H:%M:%S').dt.time
ValueError:时间数据“57:43”与格式“%H:%M:%S”不匹配,位于 位置 4.您可能想尝试: - 如果字符串的格式一致,则传递; - 如果你的字符串都是ISO8601的,但不一定是完全相同的格式,则通过; - 传递 ,并且将单独推断每个元素的格式。您可能希望与 这。
format
format='ISO8601'
format='mixed'
dayfirst
所以我尝试了 format='mixed',但我也收到这个错误:
df['time'] = pd.to_datetime(df['time'],format='mixed').dt.time
DateParseError:小时必须在 0..23:57:43 中,位于位置 4
你有什么想法来妥善处理这个问题?
答:
2赞
jezrael
9/4/2023
#1
您可以分别使用参数 for 将不匹配的格式与 Series.fillna
进行转换,以替换此值:errors='coerce'
NaT
df['time'] = (pd.to_datetime(df['time'],format='%H:%M:%S', errors='coerce')
.fillna(pd.to_datetime(df['time'],format='%M:%S', errors='coerce'))
.dt.time)
print (df)
time
0 01:01:16
1 01:05:11
2 01:08:43
3 01:03:30
4 00:57:43
评论
1赞
Samovian
9/4/2023
它工作正常,谢谢!
评论