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

Pandas DataFrame日期时间索引极值获取与timedelta计算方法

报错原因
  • 触发AttributeError: 'DataFrame' object has no attribute 'time'是因为time是DataFrame的索引,不是普通数据列,无法通过df.time的属性方式访问,必须通过索引对象取值。
  • 触发TypeError: int() argument must be a string, a bytes-like object or a number, not 'Timestamp'是因为df.index.min()返回的是Pandas Timestamp类型对象,不能直接传入int()强转;同时原逻辑里把时间转成字符串后再做减法的写法本身也不成立,字符串类型无法直接计算时间差。
正确实现方案

获取Datetime索引的统计值

对于设置为datetime类型的索引(DatetimeIndex),直接调用索引的聚合方法即可获取min、max这类统计值,返回结果为Pandas标准Timestamp对象:

# 获取索引的最早、最晚时间
start_ts = df.index.min()
end_ts = df.index.max()

# 其他常用统计值可直接同逻辑调用
time_avg = df.index.mean()  # 时间平均值
time_mid = df.index.median() # 时间中位数

timedelta计算与目标代码修正

时间差计算要在时间对象层面完成,不要先转成字符串再运算。

推荐方案:Pandas原生运算(写法最简洁)

不需要额外转换Python原生类型,Pandas原生支持时间算术运算:

# 直接计算时长,返回Pandas Timedelta类型
duration = end_ts - start_ts

# 支持按需转换单位
print(duration)  # 输出格式示例:0 days 01:35:44
print(duration.total_seconds())  # 转总秒数,输出示例:5744.0

# 生成带UTC标识的时间字符串,按需自定义格式
starttime = start_ts.strftime("%Y-%m-%d %H:%M:%S") + " UTC"
endtime = end_ts.strftime("%Y-%m-%d %H:%M:%S") + " UTC"

备选方案:转Python原生timedelta计算

如果必须使用Python标准库timedelta,要先调用Timestamp对象的timestamp()方法获取Unix秒级时间戳,再做转换:

from datetime import timedelta

# 先获取Unix时间戳再转timedelta
start_td = timedelta(seconds=int(start_ts.timestamp()))
end_td = timedelta(seconds=int(end_ts.timestamp()))
duration = end_td - start_td  # 原生timedelta类型时长

# 生成带UTC标识的字符串
starttime = str(start_td) + " UTC"
endtime = str(end_td) + " UTC"

注意:该方案生成的时间字符串是从Unix纪元(1970-01-01 00:00:00 UTC)开始累加的时间间隔格式,不会展示你数据里2022年的真实日期,如果需要展示实际业务时间,优先使用推荐方案的strftime格式化写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:35