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

如何切片带DatetimeIndex的Pandas DataFrame获取最后一小时数据?

解决Pandas DatetimeIndex切片获取最近一小时记录的问题

我来帮你搞定这个问题——你遇到的核心问题是获取的时间边界是DatetimeIndex对象,而不是单个的Timestamp,这导致loc无法正确解析切片范围。下面一步步给你拆解解决方案:

问题根源

你用bro_df.index[-1:]得到的是一个长度为1的DatetimeIndex,而不是单个的时间戳(Timestamp)。当你尝试用这个索引对象去做切片时,Pandas无法正确识别你要的是一个连续的时间范围,从而抛出类型错误或索引不存在的问题。

解决方案

1. 正确获取单个时间戳

先把最后一条记录的时间提取为单个Timestamp,而不是DatetimeIndex:

# 获取最后一条记录的时间(单个Timestamp,不是索引对象)
last_entry = bro_df.index[-1]
# 计算一小时前的时间
first_entry = last_entry - pd.Timedelta('1 hour')

你可以用type(last_entry)验证,现在得到的是pandas._libs.tslibs.timestamps.Timestamp类型,而非DatetimeIndex。

2. 两种可靠的切片方式

方式一:使用loc的范围切片(推荐)

因为你的索引是有序的DatetimeIndex,Pandas支持直接用时间范围做切片,即使索引中没有完全匹配first_entry的记录,也会自动返回区间内的所有数据:

recent_hour_df = bro_df.loc[first_entry:last_entry]

方式二:使用布尔索引(更灵活)

如果loc的范围切片遇到特殊情况,也可以用布尔条件过滤,兼容性更强:

# 构建时间区间的布尔掩码
mask = (bro_df.index >= first_entry) & (bro_df.index <= last_entry)
# 筛选符合条件的记录
recent_hour_df = bro_df[mask]

验证结果

你可以通过以下代码确认切片是否正确:

print(f"切片起始时间:{recent_hour_df.index.min()}")
print(f"切片结束时间:{recent_hour_df.index.max()}")
print(f"切片记录数:{len(recent_hour_df)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:22:01