You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从yyyyww格式列中提取ISO周对应的最后一天日期

实现代码

首先导入依赖:

import pandas as pd
import datetime

方法1:使用pandas内置日期格式解析(推荐,pandas 1.1.0+支持)

%G、%V是ISO标准对应的年份、周数格式符,%u对应星期几(1=周一,7=周日),直接拼接周数为7即可获取ISO周的最后一天:

# 替换为你实际的yyyyww格式列名
year_week_col = "你对应的列名"

# 先统一转为6位字符串,避免周数前导零缺失的问题
df_mixed[year_week_col] = df_mixed[year_week_col].astype(str).str.zfill(6)
# 解析为ISO周最后一天的日期
df_mixed['ds'] = pd.to_datetime(df_mixed[year_week_col] + '7', format='%G%V%u')

测试验证:输入201501解析结果为2015-01-04,输入201502解析结果为2015-01-11,完全符合需求。

方法2:自定义函数兼容低版本pandas

如果你的pandas版本不支持%G、%V格式符,可以用自定义函数实现:

def get_iso_week_last_day(yw_str):
    iso_year = int(yw_str[:4])
    iso_week = int(yw_str[4:])
    # 每年1月4日一定属于当年ISO第1周,以此为基准计算
    jan_4th = datetime.datetime(iso_year, 1, 4)
    # 当年ISO第1周的周一日期
    first_week_mon = jan_4th - datetime.timedelta(days=jan_4th.isoweekday() - 1)
    # 目标周的周一加6天就是周日(周最后一天)
    target_week_last = first_week_mon + datetime.timedelta(weeks=iso_week -1, days=6)
    return target_week_last

df_mixed['ds'] = df_mixed[year_week_col].astype(str).str.zfill(6).apply(get_iso_week_last_day)

注意事项

  • 该逻辑严格遵循ISO 8601周规则:每周从周一开始,周日结束,每年第1周为包含当年第一个周四的周
  • 如果你的yyyyww列存储为数值类型,转字符串时可能出现周数前导零丢失的情况,str.zfill(6)会自动补零到6位,无需额外处理

内容的提问来源于stack exchange,提问作者smrithi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 21:48:04