1

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

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']
4

3 回答 3

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-07-08T05:46:14.447 回答
2

这里可以使用period_rangeconvert today to month period by Timestamp.to_period,对于上个月减去1和添加 12 个 period 参数:

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']
于 2020-07-08T05:46:53.800 回答
1

摆脱if-elserelativedata预期工作:

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']
于 2020-07-08T05:53:55.073 回答