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

使用.loc[]对DatetimeIndex过滤时排除下界日期的实现方法

解决方案

你当前使用的df.loc[start:end]对DatetimeIndex做切片时默认是左右闭区间,会同时包含上下边界匹配的行,可以用以下几种方案实现左开右闭(排除下边界、包含上边界)的过滤:

  • 方法1:布尔索引(通用性最强,无需索引提前排序)
    直接对索引做大小判断,组合过滤条件即可:
df[(df.index > lower_border_date) & (df.index <= upper_border_date)]

注意两个判断条件外层必须加括号,否则会因为运算符优先级问题报错。如果你的lower_border_date/upper_border_date是字符串格式,建议先转成pandas Timestamp类型再做比较,避免因为字符串匹配规则出现异常:lower_border_date = pd.to_datetime(lower_border_date)

  • 方法2:使用truncate方法(适合已排序的单调DatetimeIndex,代码更简洁)
    pandas的truncate方法支持通过closed参数指定区间闭合规则:
# closed='right' 表示仅闭合右边界,即排除before参数对应的时间点
df.truncate(before=lower_border_date, after=upper_border_date, closed='right')
  • 方法3:偏移下边界(仅适合时间粒度固定的场景,不优先推荐)
    如果你的时间索引粒度统一,比如都是按天统计的,可以将下边界往后偏移一个最小粒度单位后再做普通切片:
# 示例为天粒度,偏移1天;如果是小时粒度则替换为pd.Timedelta(hours=1)
offset_lower = lower_border_date + pd.Timedelta(days=1)
df.loc[f"{offset_lower}":f"{upper_border_date}"]

这个方案容易因为索引粒度判断错误出现漏数、多取的问题,非特殊情况不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:01