Python 如何从日期范围中删除日期

Python 如何从日期范围中删除日期,python,pandas,date-range,Python,Pandas,Date Range,所以我有一个像这样的熊猫约会范围 dates = pd.date_range(start='2005-1-1', end='2014-12-31', freq='D') 我想删除闰年所产生的所有额外天数 我做一个for循环 for each in index: if each.month==2 and each.day==29: print(each) # I actually want to delete this item from dates 但我的问题是,我不

所以我有一个像这样的熊猫约会范围

dates = pd.date_range(start='2005-1-1', end='2014-12-31', freq='D')
我想删除闰年所产生的所有额外天数

我做一个for循环

for each in index:
    if each.month==2 and each.day==29:
        print(each) # I actually want to delete this item from dates
但我的问题是,我不知道如何删除该项目。常规的python列表方法和函数不起作用。 我已经到处找过了。我查看了文档,但什么也没找到


任何帮助都将不胜感激。

您可能希望使用drop删除行

import pandas as pd
dates = pd.date_range(start='2005-1-1', end='2014-12-31', freq='D')

leap = []
for each in dates:
    if each.month==2 and each.day ==29:
        leap.append(each)

dates = dates.drop(leap)

您可以尝试创建两个系列对象来分别存储月份和天数,并将它们用作遮罩

dates = pd.date_range(start='2005-1-1', end='2014-12-31', freq='D') #All dates between range
days = dates.day #Store all the days
months = dates.month #Store all the months

dates = dates[(days != 29) & (months != 2)] #Filter dates using a mask
只是为了检查方法是否有效,如果您更改
=条件设置为
=
,我们可以看到您希望取消的日期

UnwantedDates = dates[(days == 29) & (months == 2)]
输出:

DatetimeIndex(['2008-02-29', '2012-02-29'], dtype='datetime64[ns]', freq=None)
您可以尝试:

dates = dates[~dates['Date'].str.contains('02-29')] 
您必须输入存储日期的列的名称,以代替日期


您不必使用for循环,因此运行起来更快。

谢谢。掩蔽效果很好。我从来没有想到过。您知道matplotlib fill\u between为什么不能将日期范围用作索引。一直给我这个ufunc错误。非常好的解决方案@Rakesh。如果只需要日期,使用生成器可能会快一点。@Parousia,这种矢量化解决方案应该比列表理解/generator/etc更快。@Parousia,作为一般规则,在使用熊猫和数据帧时,我不惜一切代价避免编写循环。矢量化解决方案的效率要高得多。@RakeshAdhikesavan,感谢您指出这一点。问题是我对熊猫还不熟悉,我开始意识到它有一个陡峭的学习曲线。我只知道矢量化解决方案的名称。如果你知道任何关于这个主题的好教程,请分享一个链接。谢谢