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

如何在pandas中处理含可选小时的混合时长格式?

处理混合格式跑步时长的转换方案

解决这个问题的核心是区分两种时长格式,并且用适合表示时间间隔的timedelta类型处理,而非用于表示具体时间点的datetime(这也是之前报错的根本原因)。下面提供两种实用方案:

方法一:统一格式后转换为时间间隔对象

通过字符串中冒号的数量区分格式,给%M:%S格式的字符串补上前缀0:,统一为%H:%M:%S格式后,用pd.to_timedelta转换为标准时间间隔对象。

import pandas as pd

df = pd.DataFrame({'time': ['1:01:16','1:05:11','1:08:43','1:03:30','57:43']})

# 统一格式:给只有1个冒号的字符串添加前缀0:
df['formatted_time'] = df['time'].apply(lambda s: f"0:{s}" if s.count(':') == 1 else s)

# 转换为timedelta类型(表示时间间隔)
df['duration'] = pd.to_timedelta(df['formatted_time'])

# 可选:提取常用的数值指标
df['total_seconds'] = df['duration'].dt.total_seconds()
df['total_minutes'] = df['duration'].dt.total_seconds() / 60

print(df)

输出结果:

time formatted_time        duration  total_seconds  total_minutes
0  1:01:16       1:01:16 0 days 01:01:16          3676.0      61.266667
1  1:05:11       1:05:11 0 days 01:05:11          3911.0      65.183333
2  1:08:43       1:08:43 0 days 01:08:43          4123.0      68.716667
3  1:03:30       1:03:30 0 days 01:03:30          3810.0      63.500000
4    57:43       0:57:43 0 days 00:57:43          3463.0      57.716667

方法二:手动拆分计算总秒数

如果不需要保留timedelta对象,直接拆分字符串计算总秒数更直接:

import pandas as pd

df = pd.DataFrame({'time': ['1:01:16','1:05:11','1:08:43','1:03:30','57:43']})

def convert_to_seconds(time_str):
    parts = list(map(int, time_str.split(':')))
    if len(parts) == 2:
        # 格式为 分:秒
        minutes, seconds = parts
        return minutes * 60 + seconds
    elif len(parts) == 3:
        # 格式为 时:分:秒
        hours, minutes, seconds = parts
        return hours * 3600 + minutes * 60 + seconds

df['total_seconds'] = df['time'].apply(convert_to_seconds)
df['total_minutes'] = df['total_seconds'] / 60

print(df)

为什么之前的方法会报错?

  • 用pd.to_datetime指定%H:%M:%S格式时,57:43缺少小时部分,不符合格式要求,触发ValueError。
  • 用format='mixed'时,pandas会把57:43误判为%H:%M格式(把57当成小时),但小时范围必须是0-23,因此触发DateParseError。本质是datetime用于处理具体时间点,不适合表示跑步这类时间间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:58:14