我可以使用日期范围过滤数据框:
df[(df['Due Date'] >= '2017-01-01') & (df['Due Date'] <= '2017-02-01')]
但我希望能够过滤一年
答案 0 :(得分:5)
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
答案 1 :(得分: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
答案 2 :(得分:1)
将df['Due Date']
转换为时间戳,然后您可以访问year属性进行过滤。例如:
df['Due Date'] = pd.to_datetime(df['Due date'], format='%Y-%m-%d')
df[(df['Due Date'].year >= 2017) & (df['Due Date'].year <= 2018)]