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

整数周值转datetime报错求助:ValueError: unconverted data remains: 6

问题分析与解决方法

错误原因

你遇到的ValueError: unconverted data remains: 6是因为输入字符串长度与指定的格式串不匹配:

  • 格式串%Y%U%w要求输入为7位字符:4位年份 + 2位周数(00-53) + 1位星期(0-6)
  • 当周数为个位数时,(df['week_1']-1).astype(str)会生成类似20210的字符串,加上"6"后变成202106(仅6位),解析时会剩余末尾的6,导致报错。
  • 另外你的周数范围1-145跨了2021、2022、2023三个年份,直接固定2021年拼接也会导致年份计算错误。

解决方法

方法1:用日期偏移量直接计算(推荐,性能更优)

不需要手动拼接字符串,通过基准日期加周数偏移的方式生成目标日期,适合400万条数据的批量处理:

import pandas as pd

# 确定基准日期:2021年第0周的周六(对应周数0的周六,与你原代码中%w=6的定义一致)
base_date = pd.to_datetime("2020-12-26")

# 周列假设为df['week_num'](取值1-145),计算对应周六的日期
df['week_date'] = base_date + pd.to_timedelta(df['week_num'], unit='W')

如果你的周1对应2021年第1周的其他星期,只需调整基准日期即可(比如周一的话基准日期设为2020-12-21)。

方法2:修正字符串拼接逻辑

补全年份和周数的格式,确保与%Y%U%w匹配:

import pandas as pd

# 计算每个周对应的年份和当年内的周数
df['year'] = 2021 + (df['week_num'] - 1) // 52
df['week_in_year'] = (df['week_num'] - 1) % 52 + 1

# 生成符合格式的字符串:4位年 + 2位周偏移(%U从0开始) + 星期6
df['week_str'] = df['year'].astype(str) + (df['week_in_year'] - 1).astype(str).str.zfill(2) + "6"

# 转换为datetime
df['week_2'] = pd.to_datetime(df['week_str'], format="%Y%U%w")
  • str.zfill(2)确保周数偏移为两位(比如0补成00,9补成09),保证字符串长度为7位
  • 年份计算自动处理跨年情况,145周会对应到2023年的第41周

内容的提问来源于stack exchange,提问作者Kaushik .A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:54:58