将年份和周数转换为对应周周一日期 解决pandas操作Series类型报错
错误原因
datetime.date() 和 dateutil.relativedelta 仅支持传入单个标量值做计算,你直接传入pandas的Series类型列作为参数,类型不匹配,所以触发类型错误。
解决方法
方法1:使用pandas向量化操作(推荐,大数据量性能更高)
直接用pandas原生的日期处理方法实现逻辑,全程基于Series做向量计算,无需遍历:
import pandas as pd test = pd.DataFrame({ 'week': [1, 2, 3], 'year': [2021, 2021, 2022] }) # 计算逻辑和你原单值逻辑完全对齐:每年1月4日加对应周数 test['Date'] = pd.to_datetime(test['year'].astype(str) + '-01-04') + pd.to_timedelta(test['week'], unit='W')
方法2:使用apply逐行计算(适合逻辑复杂、数据量小的场景)
如果要复用你已有的dateutil计算逻辑,可以逐行取出每行的year、week标量值做计算:
import pandas as pd import datetime from dateutil.relativedelta import relativedelta test = pd.DataFrame({ 'week': [1], 'year': [2021] }) test['Date'] = test.apply(lambda row: datetime.date(row['year'], 1, 4) + relativedelta(weeks=row['week']), axis=1)
两种方法都能得到你预期的2021-01-11的计算结果。
内容的提问来源于stack exchange,提问作者v_noob
相关产品推荐
相关产品推荐

