Python Pandas 如何给日期加上DataFrame列中存储的周数
Pandas日期与DataFrame周数字段相加报错解决方案
报错原因
datetime.timedelta()的weeks参数仅支持传入单值标量,不支持直接传入Pandas Series类型对象,因此将固定周数替换为DataFrame列时会触发类型不支持错误。
解决方案
方案1:使用Pandas内置pd.to_timedelta()(优先推荐)
pd.to_timedelta()原生支持Series类型输入,属于矢量化操作,性能远高于逐行处理,适配绝大多数场景:
# 转换起始日期为datetime格式 start_datetime = pd.to_datetime(startDate, format='%Y-%m-%d') # 直接对周数列生成对应时间差,再和起始日期相加 df['Date'] = start_datetime + pd.to_timedelta(df['Duration (weeks)'], unit='W')
参数说明:unit='W'表示传入的数值单位为周。
方案2:逐行apply处理(仅适合小数据量)
如果你的周数字段存在特殊逻辑需要逐行判断,可以用apply逐行生成timedelta:
df['Date'] = df.apply( lambda row: pd.to_datetime(startDate, format='%Y-%m-%d') + datetime.timedelta(weeks=row['Duration (weeks)']), axis=1 )
注意:该方案是逐行遍历操作,数据量超过1万行时性能会明显低于方案1。
内容的提问来源于stack exchange,提问作者komalharjani
相关产品推荐
相关产品推荐

