2017-04-14 65 views
2

我可以使用的日期范围过滤一个数据帧:熊猫据帧过滤:今天 - 今天+ 1年

df[(df['Due Date'] >= '2017-01-01') & (df['Due Date'] <= '2017-02-01')] 

,但我希望能够过滤一年

+0

真的,我一直在寻找能够过滤365天的范围,即从当前日期到当前日期+ 365天 – user3822565

回答

2

df['Due Date']转换为时间戳,然后您可以访问年份属性进行过滤。例如:

df['Due Date'] = pd.to_datetime(df['Due date'], format='%Y-%m-%d') 
df[(df['Due Date'].year >= 2017) & (df['Due Date'].year <= 2018)] 
2

只是为了确保您的列是日期时间,与此

df['Due Date'] = pd.to_datetime(df['Due Date']) 

开始考虑数据框df

df = pd.DataFrame({ 
     'Due Date': pd.date_range('2015', periods=20, freq='Q'), 
     'OtherColumn': range(20) 
    }) 

你应该能够访问year通过dt日期访问者

df[df['Due Date'].dt.year >= 2017] 

    Due Date OtherColumn 
8 2017-03-31   8 
9 2017-06-30   9 
10 2017-09-30   10 
11 2017-12-31   11 
12 2018-03-31   12 
13 2018-06-30   13 
14 2018-09-30   14 
15 2018-12-31   15 
16 2019-03-31   16 
17 2019-06-30   17 
18 2019-09-30   18 
19 2019-12-31   19 

或者,您也可以使用日期过滤对指数

df.set_index('Due Date')['2017'] 

      OtherColumn 
Due Date    
2017-03-31   8 
2017-06-30   9 
2017-09-30   10 
2017-12-31   11 

或者

df.set_index('Due Date')['2016':'2017'] 

      OtherColumn 
Due Date    
2016-03-31   4 
2016-06-30   5 
2016-09-30   6 
2016-12-31   7 
2017-03-31   8 
2017-06-30   9 
2017-09-30   10 
2017-12-31   11 
3

IIUC你能做到这样:

In [99]: from dateutil.relativedelta import relativedelta 

In [100]: today = pd.datetime.today() 

In [101]: today_next_year = today + relativedelta(years=1) 

In [102]: df.loc[df['Due Date'].between(today, today_next_year)] 
Out[102]: 
    Due Date OtherColumn 
9 2017-06-30   9 
10 2017-09-30   10 
11 2017-12-31   11 
12 2018-03-31   12