代码之家  ›  专栏  ›  技术社区  ›  RK1 w--

通过排除日期范围筛选DatetimeIndex

  •  0
  • RK1 w--  · 技术社区  · 5 年前

    我现在有一个 pandas.DataFrame pandas.DatetimeIndex 以及一组值。

    我想 排除 给定时间内的所有日期 pandas.date_range 从这个 1.数据帧 .

    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'的操作数类型错误

    我看了看下面的线,但是什么也找不到: Filtering Pandas DataFrames on dates

    1 回复  |  直到 5 年前
        1
  •  2
  •   andrew_reece    5 年前

    使用 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', ...)