Pandas中datetime第53周识别问题及年周一致性疑问
Pandas 元旦跨年周数匹配问题解决办法
这个问题的核心是日历年份和ISO周年份不匹配:2021年1月1日按ISO周规则属于2020年的第53周(ISO周规定一年的第一周必须包含该年的第一个周四,2020年的第53周覆盖到了2021年1月1日),但单独调用.year取的是日历年份,和ISO周数对应的年份不一致,自然会导致排序、分组时出现错位。
绝对不能分开调用.year和.week来组合年周标识,必须用统一的ISO年周规则来获取匹配的年份和周数,具体做法如下:
- 使用
.isocalendar()方法获取匹配的ISO年、周、日:dt = pd.to_datetime('2021-01-01 00:10:00+00:00') iso_result = dt.isocalendar() print(iso_result.year, iso_result.week) # 输出 2020 53 - 若要生成用于排序或分组的年周字符串,可直接组合ISO年和周:
# 方法1:通过isocalendar拼接 dt.isocalendar().apply(lambda row: f"{row.year}-W{row.week:02d}", axis=1) # 方法2:用strftime的ISO格式符 dt.strftime("%G-W%V") # 输出 '2020-W53'
注意:pandas中的.week属性返回的是ISO周数,但.year是日历年份,二者不属于同一规则体系,混用必然出现不匹配的情况。旧版的.weekofyear属性已被废弃,同样存在这个问题,所以优先使用上述ISO规则统一的方法。
内容的提问来源于stack exchange,提问作者Paul Fleming
相关产品推荐
相关产品推荐

