如何将WW-YYYY格式的Object类型数据转换为datetime格式?
解决WW-YYYY格式转datetime的报错问题
报错原因
%W代表一年中以周一为起始的周数,单独的周数+年份无法确定唯一日期,必须指定该周的具体星期几,因此pd.to_datetime会抛出ValueError。
解决方案
由于你不需要按日展示数据,只需保证时序顺序正确,给每条数据的日期字符串拼接固定星期几即可完成转换,推荐两种实用方式:
方式1:转换为datetime类型(带固定星期几)
给WW-YYYY拼接'-1'(代表该周周一,也可替换为'-0'代表周日,按你的周起始规则调整),再指定完整格式转换:
df["Date"] = pd.to_datetime(df["Date"] + '-1', format='%W-%Y-%w')
转换后的datetime会以该周周一为固定日期,完全不影响周级时序绘图的顺序。
方式2:转换为周周期(Period)类型(更贴合周级数据)
如果不需要具体日期,直接用周周期类型更匹配数据粒度,无需额外拼接日期:
# 拆分年份和周数,创建周周期对象 df["Date"] = df["Date"].apply(lambda x: pd.Period(f"{x.split('-')[1]}-{x.split('-')[0]}", freq='W'))
这种类型天生是周级粒度,绘图时能直接按周排序展示。
内容的提问来源于stack exchange,提问作者ALain
相关产品推荐
相关产品推荐

