如何在 pandas to_datetime 中处理可选小时格式?

How to deal optionnal hour format in pandas to_datetime?

提问人:Samovian 提问时间:9/4/2023 更新时间:9/4/2023 访问量:33

问:

我需要处理字符串的数据帧(顺便说一句,跑步过程),人们在一小时之前完成,因此它的格式为“%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的,但不一定是完全相同的格式,则通过; - 传递 ,并且将单独推断每个元素的格式。您可能希望与 这。formatformat='ISO8601'format='mixed'dayfirst

所以我尝试了 format='mixed',但我也收到这个错误:

df['time'] = pd.to_datetime(df['time'],format='mixed').dt.time

DateParseError:小时必须在 0..23:57:43 中,位于位置 4

你有什么想法来妥善处理这个问题?

python pandas 时间 字符串格式

评论


答:

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
它工作正常,谢谢!