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

pandas如何根据周序号值正确创建datetime类型日期列

问题根因
  • 首次转换错误:pd.to_datetime(unit='D')默认以1970-01-01为时间原点计算天数偏移,1583天偏移后自然落在1974年,和你这套从2010年开始计数的周序号规则完全不匹配。
  • 二次转换报错:你没有先把全局连续周序号转换为对应年份的年内周序号,拼接日期字符串时格式和%V%G-%u的要求不匹配,导致解析失败。
正确转换方案

先根据给定的周序号-年份映射规则,匹配每条数据的所属年份、计算对应年份内的周序号,再按ISO周日期格式解析即可。行业通用周度数据一般默认取周一作为周的标识日期,可根据自身业务调整周内日序。

import pandas as pd
import numpy as np

# 配置周序号映射规则
range_conds = [
    (data['WEEK'] >= 1583) & (data['WEEK'] <= 1634),
    (data['WEEK'] >= 1635) & (data['WEEK'] <= 1686),
    (data['WEEK'] >= 1687) & (data['WEEK'] <= 1739)
]
match_years = [2010, 2011, 2012]
# 周数偏移量:全局周序号减偏移量=对应年份的年内周序号
week_offsets = [1582, 1634, 1686]

# 生成ISO周解析所需字段
data['iso_year'] = np.select(range_conds, match_years)
data['iso_week'] = data['WEEK'] - np.select(range_conds, week_offsets)
data['weekday'] = 1  # 1=周一,若业务以周日为周起始则改为7

# 按ISO周格式解析日期
data['date'] = pd.to_datetime(
    data['iso_year'].astype(str) + data['iso_week'].astype(str).str.zfill(2) + data['weekday'].astype(str),
    format='%G%V%u'
)

结果验证

  • WEEK=1583对应2010年第1周周一,解析结果为2010-01-04
  • WEEK=1635对应2011年第1周周一,解析结果为2011-01-03
  • WEEK=1687对应2012年第1周周一,解析结果为2012-01-02
    完全匹配周序号的对应年份规则,不会再出现1974年的异常日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:21:29