如何将DataFrame字符串周列转换为含年和周的datetime类型?
解决
ValueError: Cannot use '%W' or '%U' without day and year的问题 这个错误的核心原因很直白:当你用%W(或%U,用来标记一年中的周数)做日期转换时,必须同时指定星期几的信息——只给年份和周数的话,Python没办法定位到具体是这一周的哪一天,自然无法生成有效的datetime对象。
修复方案
我们只需要在原有的Week字符串后面拼接上星期几的标识,让pd.to_datetime能明确具体日期即可。具体选哪一天取决于你的业务逻辑(比如默认取每周一、周日等):
示例代码
import pandas as pd # 你的示例DataFrame data = pd.DataFrame({ 'Week': ['2011-31', '2011-32', '2011-33', '2011-34'], 'Price': [1.58, 1.9, 1.9, 1.9] }) # 方案1:取每周的周一(%w规则:0=周日,1=周一) data['Date_Time'] = pd.to_datetime(data['Week'] + '-1', format='%Y-%W-%w') # 方案2:用ISO标准星期规则(%u:1=周一到7=周日),同样取周一 # data['Date_Time'] = pd.to_datetime(data['Week'] + '-1', format='%Y-%W-%u') # 后续处理步骤 data = data.drop(['Week'], axis=1) data.index = data['Date_Time'] print(data)
关键格式说明
%W:统计一年中的周数,以周一作为一周的起始日,范围00-53%U:统计一年中的周数,以周日作为一周的起始日,范围00-53%w:标记星期几,0代表周日,1代表周一,以此类推到6代表周六%u:ISO标准的星期标记,1代表周一,2代表周二,以此类推到7代表周日
你可以根据自己的业务场景选择对应的格式,比如如果你的周统计周期是从周一开始的,用%u会更贴合逻辑。
内容的提问来源于stack exchange,提问作者Emre BEGEN
相关产品推荐
相关产品推荐

