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

Python日期格式转换:YYYYWW格式转DD/MM/YYYY

处理DataFrame中YYYYWW格式日期转换

要把DataFrame里YYYYWW格式的周数据转成标准日期格式(比如dd/mm/yyyy或dd-mm-yyyy),可以用以下两种实用方法:

方法1:用pandas直接解析(推荐)

利用pandas.to_datetime,通过指定格式字符串并补充星期几的标识,就能快速完成转换:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'year_week': ['202310', '202320', '202401']})

# 转成日期,默认取每周一(%W代表周一为周起始的周数,%w=1对应周一)
df['date'] = pd.to_datetime(df['year_week'] + '1', format='%Y%W%w')

# 格式化为dd/mm/yyyy
df['formatted_date'] = df['date'].dt.strftime('%d/%m/%Y')

如果你的周数是按周日为起始定义的,就换成%U格式,补充0取每周日:

df['date_sunday'] = pd.to_datetime(df['year_week'] + '0', format='%Y%U%w')

方法2:手动计算日期(更灵活)

如果需要自定义周起始或特殊逻辑,可以拆分年份和周数,用datetime模块计算:

from datetime import datetime, timedelta

def yw_to_date(yw_str, week_start='mon'):
    year = int(yw_str[:4])
    week = int(yw_str[4:])
    first_day = datetime(year, 1, 1)
    
    # 调整到当年第一周的起始日
    if week_start == 'mon':
        offset = (first_day.weekday() - 0) % 7
        start_of_year = first_day - timedelta(days=offset)
    else:
        offset = (first_day.weekday() - 6) % 7
        start_of_year = first_day - timedelta(days=offset)
    
    # 计算目标周的起始日
    target_date = start_of_year + timedelta(weeks=week-1)
    return target_date

# 应用到DataFrame
df['date'] = df['year_week'].apply(yw_to_date)
# 格式化为dd-mm-yyyy
df['formatted_date'] = df['date'].dt.strftime('%d-%m-%Y')

关键注意点

  • 周数定义匹配:%W对应ISO标准周(周一为起始,第1周包含1月4日),%U是周日起始(第1周包含1月1日),一定要和你的数据周定义对应。
  • 数据类型处理:如果year_week列是数字类型,先转成字符串:df['year_week'] = df['year_week'].astype(str)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:02:53