фильтр панд на DatetimeIndex, исключая диапазон дат - PullRequest
2 голосов
/ 15 апреля 2019

В настоящее время у меня есть pandas.DataFrame, который имеет pandas.DatetimeIndex и набор значений.

Я бы хотел исключить все даты в данном pandas.date_range из этого pandas.DataFrame.

Пример кода:

dates = pd.date_range(start='04/01/2012', end='04/01/2019', freq='MS')
df = pd.DataFrame(data=[100]*len(dates),index=dates,columns=["val"])

exclusion_dates = pd.date_range(start='04/01/2012', end='04/01/2019', freq=pd.offsets.DateOffset(months=12))

Моя попытка:

df.loc[~exclusion_dates,:]

В идеале это приведет к df, содержащему все даты , за исключением для 1st April YYYY

Однако это приводит к приведенной ниже ошибке:

TypeError: неверный тип операнда для унарного ~: 'DatetimeIndex'

Я посмотрел на ветку ниже, но ничего не смог найти: Фильтрация кадров данных Pandas по датам

1 Ответ

1 голос
/ 15 апреля 2019

Использовать isin():

df.loc[~df.index.isin(exclusion_dates)]

            val
2012-02-01  100
2012-03-01  100   <-- April excluded
2012-05-01  100
2012-06-01  100
2012-07-01  100
2012-08-01  100
2012-09-01  100
2012-10-01  100
2012-11-01  100
2012-12-01  100
2013-01-01  100
2013-02-01  100
2013-03-01  100   <-- April excluded
2013-05-01  100
...

Примечание. В формате по умолчанию строки даты обрабатываются как мм / дд / гггг.Так что используйте:

pd.date_range(start='04/01/2012', end='04/01/2019', ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...