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

