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

如何对Pandas DataFrame的日期索引进行切片筛选?

Hey,这里有两种简单实用的方法帮你筛选出指定时间范围内的DataFrame行,刚好匹配你想要的结果:

筛选Pandas DataFrame中指定时间范围的行

我注意到你期望的结果包含了time1(2018-01-04)的前一天(2018-01-03),所以下面的方法会按照这个需求实现;如果之后你需要严格的time1到time2区间,我也附上了对应的调整方式。

方法1:使用loc切片(最简洁推荐)

Pandas的日期索引天生支持切片操作,用loc可以直观地选取时间范围,代码非常清爽:

import pandas as pd
import numpy as np

# 生成原始数据
index = pd.date_range('20180101', periods=10, freq='D')
df = pd.DataFrame(np.random.randn(10), index=index)

# 给定的时间戳变量
time1 = pd.Timestamp('2018-01-04')
time2 = pd.Timestamp('2018-01-08')

# 筛选从time1前一天到time2的所有行
filtered_df = df.loc[time1 - pd.Timedelta(days=1): time2]
print(filtered_df)

运行后会得到你期望的结果:

0
2018-01-03 -3.054759
2018-01-04  1.473528
2018-01-05 -1.061746
2018-01-06  0.352680
2018-01-07  0.030430
2018-01-08  0.682517

方法2:布尔索引(更灵活)

如果需要叠加其他筛选条件,布尔索引会更灵活,通过生成掩码来筛选行:

# 生成布尔掩码:索引在[time1减1天, time2]区间内
mask = (df.index >= time1 - pd.Timedelta(days=1)) & (df.index <= time2)
filtered_df = df[mask]
print(filtered_df)

这个方法和切片的结果完全一致,适合复杂条件组合的场景。


若需严格筛选time1到time2闭区间

只需要调整起始条件为time1即可:

# 使用loc切片的方式
filtered_df = df.loc[time1: time2]

# 使用布尔索引的方式
mask = (df.index >= time1) & (df.index <= time2)
filtered_df = df[mask]

对应的结果为:

0
2018-01-04  1.473528
2018-01-05 -1.061746
2018-01-06  0.352680
2018-01-07  0.030430
2018-01-08  0.682517

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:05