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

如何将Pandas DataFrame中可变长度的时长列转为datetime类型

解决可变位数时长字符串转时间类型的问题

你遇到的问题根源是pd.to_datetime的format参数要求固定位数的匹配规则:HH、MM、SS强制对应两位数字,但你的数据里时、分、秒的位数是可变的(比如123h是三位小时、1h是一位小时),所以格式匹配失败。

更适合处理这种时长数据的工具是pd.to_timedelta(时间差类型),下面提供两种简洁的解决方案:

方案一:直接修改字符串格式后转换

pd.to_timedelta支持识别类似123h23m1s的格式,所以只需要把原字符串中的冒号去掉即可:

import pandas as pd

# 示例数据
df = pd.DataFrame({'col': ['123h:23m:1s', '1h:1m:1s', '12h:0m:14s']})

# 去掉冒号后直接转成timedelta
df['duration'] = pd.to_timedelta(df['col'].str.replace(':', ''))

方案二:提取数值后构造时间差

如果需要更灵活的控制(比如单独处理时/分/秒),可以用正则提取各部分数值,再构造timedelta:

# 用正则提取时、分、秒的数字
df[['hours', 'minutes', 'seconds']] = df['col'].str.extract(r'(\d+)h:(\d+)m:(\d+)s', expand=True).astype(int)

# 构造时间差列
df['duration'] = pd.to_timedelta(df['hours'], unit='h') + pd.to_timedelta(df['minutes'], unit='m') + pd.to_timedelta(df['seconds'], unit='s')

如果需要转成datetime类型

如果你的需求是基于某个起始日期生成具体的datetime,可以先转成timedelta,再加上起始日期:

start_datetime = pd.to_datetime('2024-01-01 00:00:00')
df['datetime'] = start_datetime + df['duration']

内容的提问来源于stack exchange,提问作者Evan Brittain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:41:03