如何从指定格式字符串提取时间?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
相关产品推荐
相关产品推荐

