如何从 pandas date_range 中删除日期
How to delete a date from pandas date_range
所以我有一个 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
但我的问题是我不知道如何删除该项目。常规 python 列表方法和函数不起作用。
我到处都看过SO。我查看了 pandas.date_range 的文档,但一无所获
任何帮助将不胜感激。
您可能想使用 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)
您可以尝试创建两个 Series 对象来分别存储月份和日期,并将它们用作掩码。
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')]
代替 Date
,您必须输入存储日期的列的名称。
您不必使用 for 循环,因此比 运行 更快。
所以我有一个 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
但我的问题是我不知道如何删除该项目。常规 python 列表方法和函数不起作用。 我到处都看过SO。我查看了 pandas.date_range 的文档,但一无所获
任何帮助将不胜感激。
您可能想使用 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)
您可以尝试创建两个 Series 对象来分别存储月份和日期,并将它们用作掩码。
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')]
代替 Date
,您必须输入存储日期的列的名称。
您不必使用 for 循环,因此比 运行 更快。