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

pandas多格式时间串转datetime及与起始时间累加的实现方法

混合格式时间列转换及合并实现方法

核心逻辑

你给出的time列本质是时间增量而非绝对时间,因此先转换为Timedelta类型,再与start_time(绝对时间)相加即可得到目标列。

实现代码

首先编写自定义时间字符串转换函数,适配你给出的所有格式:

import pandas as pd

def parse_time_str(time_str):
    # 按冒号拆分时间字符串,转为数值类型
    parts = list(map(float, time_str.split(':')))
    # 按拆分后的段数计算总秒数
    if len(parts) == 1:
        total_seconds = parts[0]
    elif len(parts) == 2:
        total_seconds = parts[0] * 60 + parts[1]
    elif len(parts) == 3:
        total_seconds = parts[0] * 3600 + parts[1] * 60 + parts[2]
    else:
        raise ValueError(f"无法识别的时间格式: {time_str}")
    return pd.Timedelta(seconds=total_seconds)

调用函数完成转换,生成目标列:

# 转换time列为Timedelta类型
df['time_delta'] = df['time'].apply(parse_time_str)

# 确保start_time为datetime类型,若本身已是该类型可跳过此步骤
df['start_time'] = pd.to_datetime(df['start_time'])

# 两列相加得到目标列
df['time_expanded'] = df['start_time'] + df['time_delta']

效果验证

用你给出的示例输入df["time"] = ["0.1", "5.1", "42:05.1", "1:42:05.1"]测试:

  • 转换后得到的Timedelta分别对应0.1秒、5.1秒、42分5.1秒、1小时42分5.1秒,完全符合需求。

可选优化说明

  • 若需要处理异常格式数据,可在转换函数中增加兜底逻辑
  • 最终生成的time_expanded列可通过dt.strftime()自定义输出为任意时间字符串格式

内容的提问来源于stack exchange,提问作者Christian Rønsholt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:39:04