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
相关产品推荐
相关产品推荐

