在python中自动提取最近九个月的数据

时间:2017-03-05 07:47:14

标签: python pandas datetime

我有一个数据框,其中包含在特定时间范围内汇总的数据,其中' date'作为其中一列。现在,每天都会向此聚合数据添加具有完全相同列的新数据。现在我想对这个聚合数据应用一个过滤器,该帖子会追加新的每日数据,我只需要最近九个月的数据。

假设df_old是您的聚合数据,而新数据是df_new。目前我正在这样做

#Append new data to old aggregated data with same columns
df_old=df_old.append(df_new)
df_old['date']=pd.to_datetime(df_old['date'])
max_date=max(df_old['date']
df_old['date_diff']=(max_date - df_old['date'])
##Considering a calender month has 30 days and three months have 31 days
df_old.loc[df_old.date_diff <=273]

现在我知道上面的方法涉及硬编码并且效率不高。如果有人可以通过一些自动化方式帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以动态生成6个月的日期

from datetime import date
from dateutil.relativedelta import relativedelta

six_months_old = date.today() + relativedelta(months=-6)

six_months_old
#datetime.date(2016, 9, 5)

现在使用此值来过滤数据框

df_old = df_old.append(df_new)
df_old['date'] = pd.to_datetime(df_old['date'])
max_date = max(df_old['date']

result_df = df_old.loc[(df_old['date'] >= six_months_old)]

答案 1 :(得分:0)

这里有更多&#34; Pandaic&#34;溶液:

数据:

In [40]: df = pd.DataFrame(pd.date_range('2000-01-01', freq='29D', periods=15), columns=['Date'])

In [41]: df
Out[41]:
         Date
0  2000-01-01
1  2000-01-30
2  2000-02-28
3  2000-03-28
4  2000-04-26
5  2000-05-25
6  2000-06-23
7  2000-07-22
8  2000-08-20
9  2000-09-18
10 2000-10-17
11 2000-11-15
12 2000-12-14
13 2001-01-12
14 2001-02-10

解决方案:

In [42]: df.loc[df['Date'] > df['Date'].max() - pd.DateOffset(months=9)]
Out[42]:
         Date
5  2000-05-25
6  2000-06-23
7  2000-07-22
8  2000-08-20
9  2000-09-18
10 2000-10-17
11 2000-11-15
12 2000-12-14
13 2001-01-12
14 2001-02-10