如何基于固定起始日期与整数天数偏移列创建Pandas日期列?
问题描述
我有如下单列Pandas DataFrame:
num_days -------- 9236 9601 9636 10454
其中整数为从固定预定义日期开始计算的天数:
START_DATE = pd.to_datetime('1980-01-01')
我希望新增一列日期(通过START_DATE加上对应num_days计算得到),期望结果如下:
num_days, date -------------- 9236 '2005-04-15' 9601 '2006-04-15' 9636 '2006-05-20' 10454 '2008-08-15'
尝试以下代码后执行失败:
df['date'] = pd.to_datetime('1980-01-01') + timedelta(df.num_days)
报错信息:
TypeError: unsupported type for timedelta days component: Series
解决方案
报错原因是Python标准库的timedelta仅支持单个数值输入,无法直接处理Pandas Series对象。以下两种方法可实现批量日期计算:
方法1:使用Pandas内置的to_timedelta函数
pd.to_timedelta可以直接将整数列转换为时间差对象,再与起始日期做矢量相加:
import pandas as pd START_DATE = pd.to_datetime('1980-01-01') df['date'] = START_DATE + pd.to_timedelta(df['num_days'], unit='D')
方法2:通过apply逐个转换天数
利用apply对Series中每个元素生成Timedelta对象,再与起始日期相加:
df['date'] = START_DATE + df['num_days'].apply(lambda x: pd.Timedelta(days=x))
如果需要将日期列转为字符串格式(如示例中的'2005-04-15'),可追加以下代码:
df['date'] = df['date'].dt.strftime('%Y-%m-%d')
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

