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

如何让pandas的timedelta类型显示为HH:MM:SS且保留运算能力

问题根因

你之前的转换逻辑存在冗余路径:将秒数转换为datetime类型时,pandas默认以1970-01-01为时间起点计算,所以生成的内容会携带1970的日期前缀。实际上无需经过「datetime转字符串再转timedelta」的流程,直接将秒数转为timedelta即可满足运算需求。

实现方案

timedelta类型的存储和显示可以分开处理:原生timedelta类型用于时间运算,仅在需要输出展示时做格式转换即可,不会影响运算能力。

完整示例代码

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'start-time': pd.to_datetime(['2012-01-02 05:57:38', '2012-04-02 06:18:39']),
    'duration': [1168, 58]
})

# 1. 直接将秒数转为timedelta类型,保留运算能力
df['duration_timedelta'] = pd.to_timedelta(df['duration'], unit='s')

# 2. 直接计算end-time,timedelta可直接和datetime相加
df['end-time'] = df['start-time'] + df['duration_timedelta']

# 3. 格式化duration为hh:mm:ss格式用于展示
df['duration'] = df['duration_timedelta'].astype(str).str.split().str[-1]

# 输出最终需要的列
df = df[['start-time', 'end-time', 'duration']]
print(df)

输出效果

start-time            end-time  duration
0 2012-01-02 05:57:38 2012-01-02 06:17:06  00:19:28
1 2012-04-02 06:18:39 2012-04-02 06:19:37  00:00:58

补充说明

如果后续需要对duration列做时间运算,直接使用duration_timedelta列即可,无需额外转换;如果不需要保留辅助列,也可以在需要展示时临时做格式化处理,不用单独存储格式化后的字符串列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:03