【问题标题】:pandas filter on DatetimeIndex by excluding date range通过排除日期范围对 DatetimeIndex 进行 pandas 过滤
【发布时间】:2019-09-04 22:18:03
【问题描述】:

我目前有一个pandas.DataFrame,它有一个pandas.DatetimeIndex 和一组值。

我想从这个pandas.DataFrame排除给定pandas.date_range 中的所有日期。

示例代码:

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

【问题讨论】:

标签: python pandas dataframe


【解决方案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', ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2020-09-08
    • 2022-01-23
    • 2013-03-26
    相关资源
    最近更新 更多