You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中为日期/时间序列添加对应天数序列?

解决Pandas中Datetime序列与天数序列对应相加的问题

我懂你试了好几种方法都碰壁的郁闷——Pandas对datetime类型的运算确实有严格的类型要求,直接和数值序列相加肯定会踩坑。核心问题是:你得把数值形式的天数转换成Pandas能识别的时间差(timedelta)类型,这样才能和datetime序列做对应元素的加法。

下面是两种最靠谱的解决方案:

方法1:使用pd.to_timedelta(推荐,效率最高)

这是最简洁且高效的方式,直接把天数序列转换成timedelta类型,指定单位为天(unit='D'),之后就能和datetime序列直接相加了:

import pandas as pd
import numpy as np

# 你的原始数据
dates = pd.Series(pd.date_range("20180101 00:00", "20180104 00:00"))
days = pd.Series(np.arange(4)).astype('float')

# 核心操作:转换天数为timedelta,再相加
result = dates + pd.to_timedelta(days, unit='D')
print(result)

输出结果:

0   2018-01-01
1   2018-01-03
2   2018-01-05
3   2018-01-07
dtype: datetime64[ns]

方法2:逐元素应用pd.DateOffset(适合小数据集)

如果你需要更灵活的时间偏移(比如同时加天、小时),可以用逐元素处理的方式,但注意这种方法在大数据量下效率不如第一种:

# 用列表推导式逐元素相加
result = pd.Series([dates[i] + pd.DateOffset(days=days[i]) for i in range(len(dates))])

为什么你之前的方法会报错?

我来帮你拆解下那些尝试的问题:

  • dates + days:Pandas无法判断数值days代表的是天、小时还是分钟,必须明确是timedelta类型才允许运算。
  • dates + days.astype('int'):就算转成整数,依然是数值类型,不是时间差类型,类型不兼容。
  • dates + pd.DateOffset(days=days):pd.DateOffset的days参数只能接受单个数值,不能直接传入Series,所以无法批量处理。
  • dates + np.timedelta64(days.values):np.timedelta64需要的是单个值或统一格式的时间差数组,直接传Series的values格式不对,正确写法应该是np.array(days.values, dtype='timedelta64[D]'),但还是不如pd.to_timedelta方便。
  • dates + pd.offsets.Day(days):和pd.DateOffset一样,pd.offsets.Day只能接受单个数值,不支持Series。
  • dates + pd.datetools.timedelta(days=days):pd.datetools已经被Pandas弃用了,而且timedelta的days参数也不能是Series。

内容的提问来源于stack exchange,提问作者joshlk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:00:52