我尝试使用以下代码从year-month (上个月的今天)到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']发布于 2020-07-08 05:46:53
这里可以使用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']发布于 2020-07-08 05:46:14
变化
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-08 05:53:55
摆脱if-else在relativedata中的作用就像预期的那样:
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']https://stackoverflow.com/questions/62788293
复制相似问题