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

如何将Pandas图表Y轴的总秒数格式化为时分秒时间显示

解决DataFrame秒数转时分秒显示及绘图Y轴格式化问题

嘿,这个需求拆成两部分处理就很顺畅——一是让DataFrame本身显示时分秒格式,二是让绘图的Y轴也同步改成时分秒格式,我给你一步步说清楚:

一、让DataFrame显示时分秒格式

这里分两种情况,看你要不要保留原始秒数用于后续计算:

情况1:直接修改数据为时分秒字符串(不保留原始数值)

如果不需要再用秒数做计算,可以直接把数值列转成时分秒格式的字符串:

import pandas as pd

# 假设你的原始DataFrame是这样的
data = {
    'day': ['2017-01-01'],
    'Object1': [6000],
    'Object2': [1234]
}
df = pd.DataFrame(data)
df['day'] = pd.to_datetime(df['day'])
df.set_index('day', inplace=True)

# 把秒数列转成timedelta对象,再提取时分秒部分
df[['Object1', 'Object2']] = df[['Object1', 'Object2']].apply(pd.to_timedelta, unit='s')
df[['Object1', 'Object2']] = df[['Object1', 'Object2']].astype(str).str.split().str[-1]

这样处理后,你的DataFrame就会直接显示1:40:00和00:20:34这种格式了。

情况2:保留原始秒数,仅修改显示格式(适合后续计算)

如果还要用原始秒数做统计或计算,就别改数据本身,只改显示规则:

# 用style.format临时修改显示格式,不影响原始数据
styled_df = df.style.format({
    col: lambda x: f"{int(x//3600)}:{int((x%3600)//60):02d}:{int(x%60):02d}" 
    for col in df.columns
})
# 展示格式化后的表格
styled_df

或者设置全局显示格式(对所有数值列生效):

pd.options.display.float_format = lambda x: f"{int(x//3600)}:{int((x%3600)//60):02d}:{int(x%60):02d}"
# 此时直接打印df就会显示时分秒
print(df)

二、让绘图的Y轴显示时分秒格式

绘图的时候建议保留原始秒数数据(保证绘图逻辑准确),只修改Y轴的标签显示格式。用Matplotlib的自定义格式化器就能实现:

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# 定义一个把秒数转成时分秒的函数
def sec_to_hms(x, pos):
    hours = int(x // 3600)
    minutes = int((x % 3600) // 60)
    seconds = int(x % 60)
    # 补零处理,比如分钟/秒不足两位时显示00:xx:xx
    return f"{hours}:{minutes:02d}:{seconds:02d}"

# 绘制折线图(其他图类型同理)
ax = df.plot(figsize=(10, 6))
# 设置Y轴的格式化器
ax.yaxis.set_major_formatter(FuncFormatter(sec_to_hms))
# 可选:旋转X轴日期标签,避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

这样绘图出来的Y轴就会显示1:40:00这种格式,而不是原始的6000秒数值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:23:20