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

如何自定义格式化Pandas DataFrame中所有timedelta对象的显示样式

实现方案

方案1:临时自定义打印函数(不修改原数据)

仅打印时做格式转换,不会改动原DataFrame的timedelta类型和取值,适合临时查看场景:

import pandas as pd
from datetime import timedelta

def format_td(td):
    days = td.days
    hours, remainder = divmod(td.seconds, 3600)
    minutes, seconds = divmod(remainder, 60)
    # 秒数四舍五入
    seconds += 1 if td.microseconds > 5e5 else 0
    # 适配示例规则:天数为0且小时为0时省略0d前缀,其余保留d单位
    if days == 0 and hours == 0:
        return f"{hours:02d}:{minutes:02d}:{seconds:02d}"
    return f"{days}d {hours:02d}:{minutes:02d}:{seconds:02d}"

def myprettyprint(df):
    print_df = df.copy()
    # 仅对timedelta类型列做格式化
    for col in print_df.columns:
        if pd.api.types.is_timedelta64_dtype(print_df[col]):
            print_df[col] = print_df[col].apply(format_td)
    # 无索引打印,保持对齐
    print(print_df.to_string(index=False))

# 测试用例
df = pd.DataFrame([
    ["short", timedelta(seconds=15.4), timedelta(hours=7, seconds=4)],
    ["long", timedelta(days=34, hours=7, seconds=4), timedelta(days=2)]
])
myprettyprint(df)

输出效果完全匹配需求:

0            1           2
 short     00:00:15 0d 07:00:04
  long 34d 07:00:04 2d 00:00:00

方案2:全局注册格式化规则(所有打印自动生效)

如果需要所有DataFrame打印时都自动应用timedelta格式,不需要每次调用自定义打印函数,可以直接注册全局类型格式化器:

# 全局生效配置
pd.options.display.formatters['timedelta64[ns]'] = format_td

# 之后直接打印即可自动应用格式
print(df)

# 若仅需临时生效,用上下文管理器
with pd.option_context('display.formatters', {'timedelta64[ns]': format_td}):
    print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:07