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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:54:00