如何将Pandas中周/年格式(10/2018)转换为日期格式
解决Pandas周/年格式转日期的问题
错误原因
你之前的代码没有正确拆分"周数/年份"格式的字符串,直接对其做数值运算后拼接,导致生成的字符串不符合%Y%U%w的解析规则,最终解析出了1020年这种超出时间范围的日期,触发OutOfBoundsDatetime错误。
正确解决方案
步骤1:拆分周数和年份
首先将week列按/拆分,分离出周数和年份:
# 拆分周数和年份,转为整数类型 df_2018_to_2022[['week_num', 'year']] = df_2018_to_2022['week'].str.split('/', expand=True).astype(int)
步骤2:构造符合格式的日期字符串
根据你需要的日期(比如第10周对应2018年3月5日,即该周的周一),构造年份+周数+星期几的字符串:
- 用
%W表示以周一为一周起始的周数(匹配你的示例日期) %w取值1代表周一(0=周日,1=周一,…,6=周六)- 周数用
str.zfill(2)补成两位,避免单周数(如第9周)格式不匹配
# 构造格式为"YYYYWWw"的字符串 date_str = df_2018_to_2022['year'].astype(str) + df_2018_to_2022['week_num'].astype(str).str.zfill(2) + '1'
步骤3:转换为日期
用pd.to_datetime解析构造好的字符串:
df_2018_to_2022['TimeDesc'] = pd.to_datetime(date_str, format='%Y%W%w')
验证结果
对于week列的10/2018,执行后TimeDesc会得到2018-03-05,完全符合你的需求。
可选调整
如果你需要的是该周的其他日期,只需要修改date_str最后一位的数字:
- 周日:改为
'0' - 周六:改为
'6'
内容的提问来源于stack exchange,提问作者anagha s
相关产品推荐
相关产品推荐

