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 天组件的类型:系列
最后我找到了两种方法!
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)