2017-04-14 64 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