python - 在 Pandas 中列出月份和年份

标签 python list datetime pandas date-range

我正在尝试制作一个日期列表,它是去年月份的范围。它的格式应为 ['Oct 2014', 'Nov 2014', 'Dec 2014', 'Jan 2015', 'Feb 2015',... 'Sep 2015']

有时会起作用,有时会截断当月。在这个月的最后一天,它不起作用,所以我做了这个 if 语句。

#If it is the last day of the month, go back a year and add a day to start at beginning of the month
#Otherwise, go back a year, go to the end of the month, and add a day to start at the beginning of the month

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, normalize = True)
else:
    range_min = range_max - pd.tseries.offsets.DateOffset(years=1)+ pd.tseries.offsets.MonthEnd(1) + pd.tseries.offsets.DateOffset(days=1, normalize = True)

然后我取出一部分我的数据,现在按预期从 2014-10-01 到 2015-09-02。 然后我列出日期!这是我正在努力解决的关键问题。

# take slice with required of data
df = df[(df['recvd_dttm'] >= range_min) & 
               (df['recvd_dttm'] <= range_max)]

#Make a date list in order to get the months to plot later on           
date_list = pd.DataFrame(index=pd.date_range(start = range_min, end = datetime.datetime.now(), freq='M'))
date_list = date_list.index.to_series().apply(lambda x: datetime.datetime.strftime(x, '%b %Y')).tolist()            

可能是我的范围有问题,就是这个:

range_min
Out[5]: Timestamp('2014-10-01 00:00:00')

range_max
Out[6]: datetime.datetime(2015, 9, 2, 10, 53, 24, 66000)

但是第一个 date_list 命令输出这个:

pd.DataFrame(index=pd.date_range(start = range_min, end = datetime.datetime.now(), freq='M'))
Out[8]: 
Empty DataFrame
Columns: []
Index: [2014-10-31 00:00:00, 2014-11-30 00:00:00, 2014-12-31 00:00:00, 2015-01-31 00:00:00, 2015-02-28 00:00:00, 2015-03-31 00:00:00, 2015-04-30 00:00:00, 2015-05-31 00:00:00, 2015-06-30 00:00:00, 2015-07-31 00:00:00, 2015-08-31 00:00:00]

其中不包括 2015-09 ,所以我的 date_list 截止到 9 月。不知道为什么会这样。此外,如果有人知道创建此列表的更简单方法,请随时将其包括在内!

谢谢!

最佳答案

您可以在不使用 pandas 的情况下列出过去一年的月份。

date_list=[datetime.date.today()- dateutil.relativedelta.relativedelta(months = x) for x in range(11,-1,-1)]
month_list=[datetime.date.strftime(x,'%b %Y') for x in date_list]

如果需要,您可以将上面的列表转换为索引为月份的 pandas dateframe。

month_list=pd.DataFrame(index=month_list)

关于python - 在 Pandas 中列出月份和年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359333/

相关文章:

python - 将地址拆分为三个不同系列的正则表达式 [第 1 部分]

sql - 如何将日期时间(SQL Server)转换为 Excel 日期时间?

javascript - 如何在 Angular 2/4 中将当前日期转换为时间戳

python - 一次迭代列表中的每 2 个元素

list - 如何将项目附加到 csh 列表?

list - flutter - 如何计算列表中数据的平均值?

javascript - 如何将 Javascript 时间戳转换为 UTC 格式?

python - 使用Python subprocess模块​​时如何传递变量

python - 使用 imshow 绘制矩阵时,乘以颜色栏中的刻度标签值

python - 如何在views.py中调用django自定义编写的AuthenticationBackend的authenticate()方法?