如何在Python中选择当前和去年的日期范围

时间:2015-08-20 17:25:10

标签: python datetime pandas slice date-range

我正在尝试从两个日期之间的系列中选择数据。它使用df.loc和mask工作正常,但我想让它自动获取当前年份数据和去年数据,而无需手动输入。

f是输入

f.head(3)
Out[37]: 
0   2011-08-02
1   2011-08-12
2   2011-08-15
Name: receiveddate, dtype: datetime64[ns]

然后我的代码是

start_date2014 = datetime.datetime(2014, 4, 1)
end_date2014 = datetime.datetime(2014, 3, 31)
mask2014 = (f >= start_date2014) & (f <= end_date2014)
DisputesFY2014 = f.loc[mask2014]
DisputesFY2014 = DisputesFY2014.value_counts()

我正在考虑使用pandas和yearend和yearbegin,但我在时间戳语法中遇到错误。我试过了:

start_date2015 = pd.tseries.offsets.YearBegin(1)#datetime.datetime(2015, 4, 1)
start_date2015 = start_date2015.to_timestamp

并得到AttributeError: 'YearBegin' object has no attribute 'to_timestamp'但我之前没有时间戳,错误是ValueError: Cannot convert Period to Timestamp unambiguously. Use to_timestamp我猜测有一种简单的方法可以做到这一点我完全失踪了。

1 个答案:

答案 0 :(得分:1)

从当前年份和去年的f中选择所有行:

year = pd.datetime.now().year
mask = f.dt.year.isin([year-1, year])
f.loc[mask]

或者,您可以使用以下方式获取当前年份:

In [119]: pd.to_datetime('now').year
Out[119]: 2015

偏移量,例如pd.tseries.offsets.YearBegin(1)用于从时间戳添加或减去时间量:

In [122]: pd.to_datetime('now')
Out[122]: Timestamp('2015-08-20 17:40:59')

In [123]: pd.to_datetime('now') + pd.tseries.offsets.YearBegin(1)
Out[123]: Timestamp('2016-01-01 17:41:04')

抵消不是自己的日期。