python - 从日期开始在 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 周等重复该等日历代码......
解决方案
您可以使用该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]
推荐阅读
- c++ - 您可以通过为每个传感器创建一个对象来使用同一类与多个传感器/文件描述符进行交互吗?
- javascript - 对象在反应中不可迭代
- python - Github Auth 使用 Django + React
- reactjs - 将状态传递给另一个组件以便我可以呈现列表?
- c# - 无法加载文件或程序集 mscorlib.dll!System.AppDomain.OnAssemblyResolveEvent
- python - 如何从数据帧中获取 numpy 数组(wav 信号)进行处理?
- vb.net - 如何使用 VB .NET 控制台中的数组输入进行 while 循环以减去我的现金 15.35
- amazon-web-services - 如何使用 KMS 加密 aws-cdk-lamdba 环境变量?
- c# - 让玩家在获得汽车 2d 坐标时移动汽车
- python - pip install pods 命令在 jupyter 中因 FileNotFoundError 失败:[Errno 2] 没有这样的文件或目录:'C:\\tmp\\sods.log'