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

如何将timedelta64[ns]格式从'x days xx:xx:xx'转为'xx:xx'(分钟维度)

解决方案

首先修正你原始代码的语法问题:计算时间差的正确代码应为 df['test'] = df['data_1'] - df['data_2'](补全缺失的闭合括号)。

要实现将1 days 00:10:00这类timedelta格式转换为HH:MM显示格式,同时保持结果为分钟维度的timedelta64[ns]类型,可以按以下步骤操作:

核心步骤

  • 先将原始timedelta转换为总分钟数,再重新构造为以分钟为单位的timedelta(确保类型符合要求)
  • 单独生成格式化后的字符串列用于展示(timedelta类型本身无法直接存储HH:MM格式,需通过字符串格式化实现显示需求)

代码实现

import pandas as pd

# 1. 将原始timedelta转换为分钟维度的timedelta64[ns]类型
df['test_min'] = pd.to_timedelta(df['test'].dt.total_seconds() // 60, unit='m')

# 2. 格式化为HH:MM字符串用于展示
df['test_formatted'] = df['test_min'].apply(
    lambda td: f"{td.days * 24 + td.seconds // 3600:02d}:{(td.seconds % 3600) // 60:02d}"
)

代码解释

  • df['test'].dt.total_seconds() // 60:提取原始timedelta的总秒数并取整为总分钟数
  • pd.to_timedelta(..., unit='m'):将分钟数重新转换为timedelta64[ns]类型,此时该列的时间差以分钟为最小存储单位
  • 格式化逻辑:将timedelta的天数转为小时,加上剩余小时数,搭配分钟数,格式化为两位数字的HH:MM字符串

验证类型

执行后可通过以下代码确认类型:

print(df['test_min'].dtype)  # 输出应为 timedelta64[ns]

若无需单独的显示列,仅需在查看DataFrame时以HH:MM格式展示timedelta,可自定义pandas的显示格式:

from pandas.io.formats.format import DatetimeFormatter

# 自定义timedelta的显示格式
DatetimeFormatter.formatter = lambda x: (
    f"{x.days*24 + x.seconds//3600:02d}:{(x.seconds%3600)//60:02d}" 
    if pd.notna(x) else x
)

# 此时直接查看df['test_min']会以HH:MM格式显示,类型仍为timedelta64[ns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:55:24