将天数添加到日期/日期时间(Pandas/Numpy)

jos*_*hlk 1 python datetime numpy date pandas

在 Pandas 中,我想在日期/日期时间(两列)中添加天数。

例子:

dates = pd.Series(pd.date_range("20180101 00:00", "20180104 00:00"))

0   2018-01-01
1   2018-01-02
2   2018-01-03
3   2018-01-04
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

days = pd.Series(np.arange(4)).astype('float')

0    0.0
1    1.0
2    2.0
3    3.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我尝试过的(以及我得到的相关错误):

dates + days
Run Code Online (Sandbox Code Playgroud)

类型错误:无法对没有类型为 datetime64[ns] 或 timedelta 的系列/ndarray 的 rhs 的系列进行操作

dates + days.astype('int')
Run Code Online (Sandbox Code Playgroud)

类型错误:日期时间/时间增量操作的类型不兼容 [__add__]

dates + pd.DateOffset(days=days)
Run Code Online (Sandbox Code Playgroud)

类型错误:DatetimeIndex 无法执行操作 +

dates + np.timedelta64(days.values)
Run Code Online (Sandbox Code Playgroud)

ValueError:无法将对象转换为 NumPy timedelta

dates + pd.offsets.Day(days)
Run Code Online (Sandbox Code Playgroud)

类型错误:无法将系列转换为

dates + pd.datetools.timedelta(days=days)
Run Code Online (Sandbox Code Playgroud)

类型错误:不支持 timedelta 天组件的类型:系列

jos*_*hlk 5

最后我找到了两种方法!

dates + pd.to_timedelta(days, unit='D') 
Run Code Online (Sandbox Code Playgroud)

或者

dates + pd.TimedeltaIndex(days, unit='D')
Run Code Online (Sandbox Code Playgroud)

两者都产生:

0   2018-01-01
1   2018-01-03
2   2018-01-05
3   2018-01-07
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

(花了很长时间才找到相关文档:https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#to-timedelta