Python 如何按日期范围过滤数据帧而不指定年份

Python 如何按日期范围过滤数据帧而不指定年份,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个带有日期时间索引的熊猫数据框,如下所示: 1970-01-01 1970-01-02 1970-01-03 ... 2021-04-26 2021-04-27 ... 如何按日期范围过滤,即“02-01”:“04-05”,结果如下: 1970-02-01 1970-02-02 ... 1970-04-05 1971-02-01 1971-02-02 ... 1971-04-05 ... 可以使用布尔索引,例如: m = ((df.index.month >= 2) &

假设我有一个带有日期时间索引的熊猫数据框,如下所示:

1970-01-01
1970-01-02
1970-01-03
...
2021-04-26
2021-04-27
...
如何按日期范围过滤,即“02-01”:“04-05”,结果如下:

1970-02-01
1970-02-02
...
1970-04-05
1971-02-01
1971-02-02
...
1971-04-05
...

可以使用布尔索引,例如:

m = ((df.index.month >= 2) & (df.index.month <= 4)) & (
    (df.index.day >= 1) & (df.index.day <= 5)
)

print(df[m])

编辑:您可以跳过
=1
几天:

m = ((df.index.month >= 2) & (df.index.month <= 4)) & (df.index.day <= 5)
print(df[m])
然后将“日期”列转换为datetime,设置索引并对其进行过滤:

df[“Date”]=pd.to_datetime(df[“Date”],dayfirst=False)
df=df.set_索引(“日期”)

m=((df.index.month>=2)和(df.index.month=1)和(df.index.day大于等于1)在日期方面是多余的创建大于或等于也不需要额外的计算,当大于或小于时就足够了这是我的第一种方法。但是“df.index.day@Andrej:这只是一个15-20年的连续数据帧。我想过滤任意的时间范围,如xxxx-03-17-xxxx-05-29,并获得所有年份的时间跨度之间的所有天数。好的,谢谢。我想可能有一个我监管过的熊猫捷径,但这应该行得通。
year_min = df.index.min().year
year_max = df.index.max().year

m = [False] * len(df)
for y in range(year_min, year_max + 1):
    m = ((df.index >= f"{y}-02-01") & (df.index <= f"{y}-04-05")) | m

print(df[m])