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

pandas中datetime索引调用last()函数返回结果异常如何解决?

问题原因
  • 核心前提缺失:pandas 中基于时间偏移的first()/last()方法,强制要求DatetimeIndex是升序单调排序的,未排序的索引调用该方法时行为未定义,不会返回符合预期的结果。你的代码在设置索引后,索引顺序是原始数据插入顺序:2022-06-14 → 2022-05-18 → 2022-06-06,属于乱序状态,这是返回错误结果的首要原因。
  • 时间解析参数错误:你调用pd.to_datetime时传入的format='%Y-%m-%d %H:%M:%S'和实际时间字符串格式不匹配。原始时间字符串包含微秒段(如.292000)和时区后缀(+00:00),传入的格式串仅覆盖到秒级,会导致时间解析精度丢失、结果异常。
正确使用步骤
  1. 正确解析时间列:对于标准ISO格式的时间字符串,可直接省略format参数让pandas自动推断解析,避免手动写格式串出现匹配错误。
  2. 设置时间索引后,必须先调用sort_index()对索引做升序排序。
  3. 排序完成后再调用last()传入时间偏移参数筛选数据。

修正后的可运行代码:

import pandas as pd

df = pd.DataFrame({
        'timestamp' : ['2022-06-14 16:01:00.292000+00:00', '2022-05-18 05:00:37.843000+00:00', '2022-06-06 00:00:56.134000+00:00'],
        'otherColumn' : ['A', 'B', 'C'],
    })
# 解析标准ISO时间无需手动指定format
df["timestamp"] = pd.to_datetime(df["timestamp"])
df = df.set_index(['timestamp'])
# 对时间索引升序排序是调用last/first的必要前置操作
df = df.sort_index()
print(df.last('1D'))

运行后正确返回最新时间点前1天范围内的数据,即2022-06-14对应的行:

otherColumn
timestamp                                
2022-06-14 16:01:00.292000+00:00           A

补充说明:last(offset)的计算逻辑是,以排序后索引的最大时间值为终点,往前推对应offset长度的时间窗口,返回窗口内的所有数据,不是取最后1行,也不是按自然日边界切割。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:39:18