如何将DataFrame中`1'29.30"`格式时间字符串转换为标准时间格式
实现方案
不需要编写复杂的正则匹配逻辑,有两种更简便的实现方式:
方法1:字符串替换 + pandas内置时间转换(代码量最少)
直接替换特殊符号后用pd.to_timedelta直接转成时间差格式,适合后续做时间计算、排序等场景:
import pandas as pd # 替换规则:把分符号'替换为冒号,去掉秒符号" # 前面补00:标识小时位,适配to_timedelta的识别规则 df['time'] = pd.to_timedelta( '00:' + df['time_str'].str.replace("'", ":").str.replace('"', ''), unit='s' )
转换后的time列是timedelta类型,如果需要转成总秒数可以直接取.dt.total_seconds()属性。
方法2:简单正则提取各时间分量(逻辑更清晰,易自定义)
如果需要单独获取分钟、秒、厘秒数值做后续处理,用pandas的str.extract做简单分组提取即可,不需要自己写正则匹配的判断逻辑:
import pandas as pd import datetime # 直接提取分、秒、厘秒三个分量 time_parts = df['time_str'].str.extract(r"(\d+)'(\d+)\.(\d+)\"").astype(int) # 1. 转总秒数 df['total_seconds'] = time_parts[0] * 60 + time_parts[1] + time_parts[2] / 100 # 2. 转标准datetime.time类型 df['std_time'] = time_parts.apply( lambda x: datetime.time(0, x[0], x[1], x[2] * 10000), # 厘秒转微秒:1厘秒=10000微秒 axis=1 )
提示:如果你的数据中存在分钟数超过60的场景,建议转换为
timedelta类型或者总秒数存储,不要转datetime.time类型,避免溢出报错。
两种方法都可以直接对整个Series批量处理,不需要循环遍历每一行,性能比自行写正则遍历处理更高。
内容的提问来源于stack exchange,提问作者CezarySzulc
相关产品推荐
相关产品推荐

