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

如何将年周格式字符串转为datetime并设为DataFrame索引?

解决YYYYWW格式字符串转Datetime并设为DataFrame索引的问题

你遇到的问题很常见——用pd.to_datetime(df1['period'],format='%Y%U')无效,是因为%U(以周日为一周起始的周数)需要搭配星期几的标识才能确定具体日期。pandas无法仅凭年和周数推断出对应的datetime,毕竟一个周数对应一周内的7天,没有锚点日期就无法定位。

下面给你两种可行的解决方案:

方案1:转换为具体的Datetime日期

如果你需要一个具体的日期(比如每周的周一或周日)作为周的代表,可以给原字符串拼接一个星期几的数字,再指定格式转换:

import pandas as pd

# 示例数据
df1 = pd.DataFrame({'period': ['201801', '201801', '201801', '201801', '201801']})

# 拼接'1'表示取每周的周一(%w规则中,1代表周一,0代表周日)
df1['period'] = pd.to_datetime(df1['period'] + '1', format='%Y%U%w')

# 设置为DataFrame索引
df1.set_index('period', inplace=True)

如果你的周数是ISO标准周(每周从周一开始,周数范围1-53),可以改用%G%V%u格式适配:

df1['period'] = pd.to_datetime(df1['period'] + '1', format='%G%V%u')
df1.set_index('period', inplace=True)

方案2:直接使用Period类型(更贴合年周需求)

如果你不需要具体到天的datetime,只是想标记"年+周"的时间区间,用PeriodIndex会更合适——它专门用来表示时间周期,完全避免不必要的日期歧义:

df1['period'] = pd.PeriodIndex(df1['period'], freq='W')
df1.set_index('period', inplace=True)

生成的索引会直接显示类似2018-01-01/2018-01-07的周区间,完美匹配你对"包含年和周"的需求。

内容的提问来源于stack exchange,提问作者Naveen Raj B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:44