API: timedelta64[ns] elements operate with timedelta/offsets · Issue #5436 · pandas-dev/pandas (original) (raw)

have to return timedelta64[ns] scalars

type: timedelta64[ns]

In [23]: s = pd.to_timedelta(np.arange(5),unit='d')

In [24]: s
Out[24]: 
0           00:00:00
1   1 days, 00:00:00
2   2 days, 00:00:00
3   3 days, 00:00:00
4   4 days, 00:00:00
dtype: timedelta64[ns]

In [25]: s + timedelta(hours=1)
Out[25]: 
0           01:00:00
1   1 days, 01:00:00
2   2 days, 01:00:00
3   3 days, 01:00:00
4   4 days, 01:00:00
dtype: timedelta64[ns]

In [26]: s + pd.offsets.Hour(1)
Out[26]: 
0           01:00:00
1   1 days, 01:00:00
2   2 days, 01:00:00
3   3 days, 01:00:00
4   4 days, 01:00:00
dtype: timedelta64[ns]

In [27]: s.iloc[2] + pd.offsets.Hour(1)
TypeError: ufunc add cannot use operands with types dtype('<m8[ns]') and dtype('O')

In [29]: s.iloc[2] + timedelta(hours=1)
TypeError: ufunc add cannot use operands with types dtype('<m8[ns]') and dtype('O')

This works (wrapping in a np.timedeltat64

In [31]: s.iloc[2] += np.timedelta64(timedelta(hours=1))

In [32]: s
Out[32]: 
0           00:00:00
1   1 days, 00:00:00
2   2 days, 01:00:00
3   3 days, 00:00:00
4   4 days, 00:00:00
dtype: timedelta64[ns]

Reevaluate whether summary ops should just return the np.timdelta64 scalar
(not as pretty though)

In [33]: s.mean()
Out[33]: 
0   2 days, 00:12:00
dtype: timedelta64[ns]

In [34]: s.mean().iloc[0]
Out[34]: numpy.timedelta64(173520000000000,'ns')