如何将年周格式字符串转为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
相关产品推荐
相关产品推荐

