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

如何在Pandas中按指定datetime时间范围筛选索引数据

错误原因

你的start和end变量都是长度为1的DatetimeIndex类型(不是单个时间戳对象),直接和长度远大于1的df.index做逐元素比较时,Pandas会要求两个比较对象的长度一致,因此抛出长度不匹配的错误。

另外你给出的示例代码里创建DataFrame的逻辑也存在小问题:索引长度为26,但传入的data是长度为25的单行数据,会触发维度不匹配报错,建议先修正为:

import pandas as pd
from datetime import timedelta

idx = pd.DatetimeIndex(['2021-10-16 15:00:00', '2021-10-16 16:00:00',
           '2021-10-16 17:00:00', '2021-10-16 18:00:00',
           '2021-10-16 19:00:00', '2021-10-16 20:00:00',
           '2021-10-16 21:00:00', '2021-10-16 22:00:00',
           '2021-10-16 23:00:00', '2021-10-17 00:00:00',
           '2021-10-17 01:00:00', '2021-10-17 02:00:00',
           '2021-10-17 03:00:00', '2021-10-17 04:00:00',
           '2021-10-17 05:00:00', '2021-10-17 06:00:00',
           '2021-10-17 07:00:00', '2021-10-17 08:00:00',
           '2021-10-17 09:00:00', '2021-10-17 10:00:00',
           '2021-10-17 11:00:00', '2021-10-17 12:00:00',
           '2021-10-17 13:00:00', '2021-10-17 14:00:00',
           '2021-10-17 15:00:00', '2021-10-17 16:00:00'],
          dtype='datetime64[ns]', freq='H')
# 修正DataFrame创建逻辑
df = pd.DataFrame(range(len(idx)), index=idx, columns=['value'])
end = df.tail(1).index
start = end - timedelta(hours=5)
解决方法

以下是几种常用的实现方式:

方法1:提取单个时间戳做条件筛选

取DatetimeIndex的第一个元素,得到单个Timestamp对象后再做比较:

start_ts = start[0]
end_ts = end[0]
result = df.loc[(df.index >= start_ts) & (df.index <= end_ts)]

方法2:使用时间切片(最简洁)

Pandas的Datetime索引原生支持范围切片,直接传入起止时间即可,默认是包含两端的闭区间:

result = df.loc[start[0]:end[0]]

方法3:使用between方法

直接调用索引的between方法判断是否在区间内:

result = df.loc[df.index.between(start[0], end[0])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:08