在 Python 中创建连续年份月份的列表

Posted

技术标签:

【中文标题】在 Python 中创建连续年份月份的列表【英文标题】:Create a list of sequent year month in Python 【发布时间】:2020-10-28 11:31:42 【问题描述】:

我尝试使用以下代码创建从2020-06(上个月从今天开始)到2021-05year-month 列表:

from datetime import datetime
from dateutil.relativedelta import relativedelta
need_months = list(range(-1, 12))
print([(datetime.today()+ relativedelta(months=i if i < 0 else i - 1)).strftime('%Y-%m') for i in need_months])

输出:

['2020-06', '2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12', '2021-01', '2021-02', '2021-03', '2021-04', '2021-05']

但您可能注意到,列表中有两个2020-06

我怎样才能正确地做到这一点?

预期结果:

['2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12', '2021-01', '2021-02', '2021-03', '2021-04', '2021-05']

【问题讨论】:

为什么不直接使用need_months = list(range(12))?或更简单(更好)[... for i in range(12)]? 它有效,如果我想从2020-05开始? 你用熊猫标记了这个。 pandas.date_range 无需任何循环即可轻松处理此问题 【参考方案1】:

这里可以使用period_range,通过Timestamp.to_period 将今天转换为月份,上个月减去1 并添加12 个周期参数:

now = pd.Timestamp.now().to_period('m')
L = pd.period_range(now-1, freq='M', periods=12).strftime('%Y-%m').tolist()
print (L)
['2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', 
 '2020-12', '2021-01', '2021-02', '2021-03', '2021-04', '2021-05']

【讨论】:

我认为有错误:strftime('%Y-%M'), M 应该是m 事实上,我试图避免使用确定的日期值2021-05,这就是我创建列表的原因。相反,我希望日期列表在从 2020-06 开始的接下来的 12 个月内结束。 @ahbon - 如果使用 12 个句点参数,编辑答案会更简单。【参考方案2】:

改变

need_months = list(range(-1, 12))

need_months = list(range(0, 12))
print([(datetime.today()+ relativedelta(months=i if i < 0 else i - 1)).strftime('%Y-%m') for i in need_months])

输出:-

'2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12', '2021-01', '2021-02', '2021-03', '2021-04', '2021-05']

【讨论】:

谢谢,可以,如果我想从2020-05开始? @ahbon,该解决方案由 Chris 发布。【参考方案3】:

relativedata 中删除if-else 按预期工作:

from datetime import datetime
from dateutil.relativedelta import relativedelta
need_months = list(range(-1, 12))
print([(datetime.today()+ 
        relativedelta(months=i-1)).strftime('%Y-%m') 
       for i in need_months])

输出:

['2020-05', '2020-06', '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12', '2021-01', '2021-02', '2021-03', '2021-04', '2021-05']

【讨论】:

以上是关于在 Python 中创建连续年份月份的列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React js JSX 在下拉列表中创建年份列表

如何在 DolphinDB 中创建月份列表?

在 vb/c#.net 中创建一个连续的列表(像一个***)

尝试在 Redshift 中创建日期表

在日期选择器中未显示月份和年份下拉列表中的数据

Django - 非连续月份