如何将Optional包裹的时间字符串转换为datetime并提取目标时间?
解决方法
你的问题出在原始字符串被Optional()包裹,直接用pd.to_datetime无法解析这种非标准格式。需要先剥离外层的包裹结构,再处理时间部分。
步骤1:提取括号内的时间字符串
用正则表达式提取()之间的内容,这是适配该格式最可靠的方式:
df['start_time'] = df['start_time'].str.extract(r'\((.*)\)')[0]
执行后,Optional(2023-12-19 23:11:57 +0000)会被转换成2023-12-19 23:11:57 +0000。
步骤2:转换为datetime类型
此时可以正常使用pd.to_datetime完成转换:
df['start_time'] = pd.to_datetime(df['start_time'])
若仅需要2023-12-19 23:11:57部分
有两种快捷方式:
# 方法1:从datetime对象格式化输出 df['start_time_short'] = df['start_time'].dt.strftime('%Y-%m-%d %H:%M:%S') # 方法2:直接从提取的字符串截取 df['start_time_short'] = df['start_time'].str.split(' ').str[:2].str.join(' ')
之前尝试失败的原因
- 直接调用
pd.to_datetime(df['start_time']):字符串包含Optional()前缀,不属于标准时间格式,解析器无法识别。 - 指定
format='Optional':format参数要求匹配完整的字符串格式,而非仅前缀,剩余的时间部分无法被转换,因此触发报错。
内容的提问来源于stack exchange,提问作者koshkozhena
相关产品推荐
相关产品推荐

