我目前有一个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
包含所有日期{strong> 的所有日期1st April YYYY
但是,这会导致以下错误:
TypeError:一元〜的错误操作数类型:“ DatetimeIndex”
我看着下面的线程,但是找不到任何东西: Filtering Pandas DataFrames on dates
答案 0 :(得分:1)
使用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
...
注意:默认格式将日期字符串视为mm / dd / yyyy。因此使用:
pd.date_range(start='04/01/2012', end='04/01/2019', ...)