python - 今年的最后一周归因于下一年

标签 python pandas date datetime

pandas.date_range() 函数中,2021 年的最后一周被指定为 2022 年,而除了周六和周日(1 月 1 日和 2 日)外,其余日期都属于2021 年。

import pandas as pd

for x in pd.date_range(start='2021-12-01', end='2022-01-04', freq='W'):
    print('date: ', x, '\tweek: ', x.week, '\tyear: ', x.year)
Output:

date:  2021-12-05 00:00:00      week:  48       year:  2021
date:  2021-12-12 00:00:00      week:  49       year:  2021
date:  2021-12-19 00:00:00      week:  50       year:  2021
date:  2021-12-26 00:00:00      week:  51       year:  2021
date:  2022-01-02 00:00:00      week:  52       year:  2022

输出是有道理的,但是,这在我使用的过滤下不起作用:

df[(df['date'].year == x.year) & (df['date'].week == x.week)]

目前这个问题已经通过创可贴解决了,但希望明年能够完全发挥作用。

最佳答案

这是一个功能,而不是一个错误。 周编号基于 ISO 8601,具体来说:“如果 1 月 1 日是星期五、星期六或星期日,则位于上一年的第 52 或 53 周”。您需要更改应用程序逻辑以包含该边缘情况。

https://en.wikipedia.org/wiki/ISO_8601#Week_dates

此外,根据 pandas 文档:

weekofyearweek 已弃用。请改用 DatetimeIndex.isocalendar().week。”

如果您同时切换到 x.isocalendar().weekx.isocalendar().year,您将获得一致但不直观的输出:

date:  2021-12-19 00:00:00      week:  50       year:  2021
date:  2021-12-26 00:00:00      week:  51       year:  2021
date:  2022-01-02 00:00:00      week:  52       year:  2021
date:  2022-01-09 00:00:00      week:  1        year:  2022

关于python - 今年的最后一周归因于下一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70592991/

相关文章:

python - 防止将脚本目录添加到 Python 3 中的 sys.path

python - Pygame粒子效果

python - 将多行合并到数据框列的一行

PHP 代码忽略日

python - gtk:设置事件窗口

python - emacs 中 python 代码折叠的范围

python - Pandas :Groupby Fillna 不工作

python - 如果值出现在基于一个列值的另一个数据框中,则更改一个数据框中的值

php - 如何在 PHP 中比较两个日期?

Java 日历时区