首页 > 解决方案 > 从日期开始在 Python 中设置超过 52 周

问题描述

.datetime(Year,Month,Day).strftime 当我在 Python 中使用该函数时,在能够根据日期区分不同的数据集时遇到一些问题。

似乎一旦它在一年中达到 52 周,它就会从第 0 周开始在下一年再次重复它,这显然是正确的。

我想知道的是,有没有办法使用各种函数或循环来区分第 53 周(明年的第 1 周)?

我正在尝试这样做,以便我可以使用周作为独立因素(x 轴)创建一个延伸到当前日期的图表 - 目前它只是从第 0 周延伸到第 52 周,但实际上应该延伸到此之外。

我一直在尝试想出一种适用于 a 的逻辑,for loop但还没有真正想到任何想法。任何指导都将受到高度赞赏,因为我对编码场景还很陌生。

谢谢!

编辑:

这是我目前拥有的...

for index, row in dt.iterrows():
Month = dt['Month']
Day = dt['Day']
Year = dt['Year']
date_list.append(datetime.datetime(Year[index], dt['Month'][index], dt['Day'][index]).strftime("%W"))

dt['Week'] = date_list

由于我的数据集经历了超过 1 年(目前大约 5 年),我是否不必在第 54、55、56 周等重复该等日历代码......

标签: python

解决方案


您可以使用该date.isocalendar()函数将日期转换为 ISO 周数,或者date.fromisocalendar()(Python 3.8 中的新功能)以另一种方式进行。我通过打开模块的文档datetime并搜索“week”找到了这些。

您可以像这样使用这些枚举一年中的所有星期(同样,您需要 Python 3.8 来使用该fromisocalendar()函数):

has_week_53 = date.fromisocalendar(year, 52, 1) + timedelta(days=7) != date.fromisocalendar(year + 1, 1, 1)
week_count = 53 if has_week_53 else 52
for week in range(week_count):
    date_of_monday = date.fromisocalendar(year, week, 1)
    # use date_of_monday somehow

编辑:如果您不能使用 Python 3.8,这是一种确定周数的方法。根据关于 ISO week date 的 Wikipedia 文章,上周具有始终包含 12 月 28 日的属性。所以这告诉你周数:

week_count = date(year, 12, 28).isocalendar()[1]

推荐阅读