日期列表不计算当前月份

时间:2015-08-04 23:03:25

标签: python list datetime dataframe date-range

我正在尝试制作这样的日期列表:

date_list
Out[27]: 
['Sep 2014',
 'Oct 2014',
 'Nov 2014',
 'Dec 2014',
 'Jan 2015',
 'Feb 2015',
 'Mar 2015',
 'Apr 2015',
 'May 2015',
 'Jun 2015',
 'Jul 2015',
 'Aug 2015']

但由于某些原因,我的代码将在8月份删除。我从去年到现在都拿了一大堆代码。

我做了一个if语句,因为如果它是这个月的最后一天,它只需要过去几个月中的11个而不是12个。

range_max = datetime.datetime.now() 
date = datetime.datetime.now()

if datetime.datetime.now().day == calendar.monthrange(date.year, date.month)[1]:
    range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.DateOffset(days=1)
else:
    range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1)

然后我从数据框中取出切片

df = df[(df['recvd_dttm'] >= range_min) & 
               (df['recvd_dttm'] <= range_max)]

然后我制作我的date_list。

date_list = pd.DataFrame(index=pd.date_range(start = range_min, end = range_max, freq='M'))
print date_list
date_list = date_list.index.to_series().apply(lambda x: datetime.datetime.strftime(x, '%b %Y')).tolist()

然而,这是打印

date_list
Out[27]: 
['Sep 2014',
 'Oct 2014',
 'Nov 2014',
 'Dec 2014',
 'Jan 2015',
 'Feb 2015',
 'Mar 2015',
 'Apr 2015',
 'May 2015',
 'Jun 2015',
 'Jul 2015']

有谁知道为什么它没有调用August数据?这只是前几天的工作,我不明白出了什么问题。 8月的数据肯定在我为此代码提取的数据框中。

1 个答案:

答案 0 :(得分:0)

如果今天不是该月的最后一天,那么range_min将设置为一年前的最后一天。因此,当我运行它时给出的日期是:

[2014-09-30 00:20:35.774489, 
 2014-10-31 00:20:35.774489, 
 2014-11-30 00:20:35.774489, 
 ..., 
 2015-07-31 00:20:35.774489]

我不是大熊猫的专家,但是python中的大多数游戏比你期望的少一个,并且因为它还不是8月的最后一天而你正在添加一个每个月我认为你需要在这里增加一个月:

date_list = pd.DataFrame(index=pd.date_range(start = range_min, end = range_max + pd.tseries.offsets.DateOffset(months = 1), freq='M'))

那么你的日期会持续到8月底,如果这是你想要的吗?