You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从指定格式字符串提取时间?Python DataFrame列替换需求

提取ISO格式字符串中的时间部分(仅保留HH:MM:SS)

我来帮你搞定这个问题!你的DataFrame列里是类似2018-01-25T20:30:02.533+0000的ISO格式字符串,要提取出20:30:02这样的时间部分,有几种简单实用的方法,我给你逐个说明:

方法1:字符串分割法(最直接)

利用字符串里固定的分隔符T和.来拆分,一步到位:

import pandas as pd

# 假设你的DataFrame名为df,目标列是'time_str'
df['time_only'] = df['time_str'].str.split('T').str[1].str.split('.').str[0]

原理:

  • str.split('T').str[1]:把字符串按T切分,取后面的时间部分(比如20:30:02.533+0000)
  • str.split('.').str[0]:再把时间部分按.切分,取前面不带毫秒的核心时间(20:30:02)

方法2:转成datetime对象后提取(更灵活)

如果之后你还需要对时间做排序、计算等操作,推荐先转成datetime类型再提取:

df['time_only'] = pd.to_datetime(df['time_str']).dt.time.astype(str)

原理:

  • pd.to_datetime():自动识别ISO格式字符串,转换成pandas的datetime对象
  • dt.time:从datetime对象中提取纯时间部分(返回datetime.time类型)
  • astype(str):把时间对象转成字符串格式,正好是HH:MM:SS

方法3:正则表达式匹配(适配复杂格式)

如果你的字符串格式有轻微变化(比如分隔符不同),正则匹配更通用:

df['time_only'] = df['time_str'].str.extract(r'(\d{2}:\d{2}:\d{2})', expand=False)

原理:

正则表达式(\d{2}:\d{2}:\d{2})会精准匹配「两位数字+冒号+两位数字+冒号+两位数字」的格式,也就是我们要的时间部分,str.extract会把匹配到的内容提取出来。

小提示:

如果列里存在缺失值,可以在字符串操作时加上na=False参数(比如df['time_str'].str.split('T', na=False).str[1]),避免出现报错;或者最后用df['time_only'].fillna('')填充空值。

内容的提问来源于stack exchange,提问作者Imran Ahmad Ghazali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:09