Closed
Description
Example code
import pandas as pd
import numpy as np
dti = pd.date_range('2018-01-01', periods=100, freq='T')
dtd = dti[1:] - dti[:-1]
print(np.sum(dtd))
Problem description
Summing a TimedeltaIndex when using pandas 0.24.0 or newer with any version of numpy, or pandas 0.23.4 with any version of numpy newer than 0.15.4 fails, np.sum(dtd)
gives the following output:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-d64fe48d0fec> in <module>
6
7 print(np.mean(dtd)) # works
----> 8 print(np.sum(dtd)) # breaks
~/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py in sum(a, axis, dtype, out, keepdims, initial)
2074
2075 return _wrapreduction(a, np.add, 'sum', axis, dtype, out, keepdims=keepdims,
-> 2076 initial=initial)
2077
2078
~/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py in _wrapreduction(obj, ufunc, method, axis, dtype, out, **kwargs)
84 return reduction(axis=axis, out=out, **passkwargs)
85
---> 86 return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
87
88
~/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in __array_wrap__(self, result, context)
658 attrs = self._get_attributes_dict()
659 attrs = self._maybe_update_attributes(attrs)
--> 660 return Index(result, **attrs)
661
662 @cache_readonly
~/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py in __new__(cls, data, dtype, copy, name, fastpath, tupleize_cols, **kwargs)
301 (dtype is not None and is_timedelta64_dtype(dtype))):
302 from pandas.core.indexes.timedeltas import TimedeltaIndex
--> 303 result = TimedeltaIndex(data, copy=copy, name=name, **kwargs)
304 if dtype is not None and _o_dtype == dtype:
305 return Index(result.to_pytimedelta(), dtype=_o_dtype)
~/.local/lib/python3.6/site-packages/pandas/core/indexes/timedeltas.py in __new__(cls, data, unit, freq, start, end, periods, closed, dtype, copy, name, verify_integrity)
250
251 # check that we are matching freqs
--> 252 if verify_integrity and len(data) > 0:
253 if freq is not None and not freq_infer:
254 index = cls._simple_new(data, name=name)
TypeError: len() of unsized object
Other methods such as np.mean()
and np.median()
continue to function normally
Expected Output
5940000000000 nanoseconds
Output of pd.show_versions()
INSTALLED VERSIONS
------------------
commit: None
python: 3.6.7.final.0
python-bits: 64
OS: Linux
OS-release: 4.15.0-45-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
pandas: 0.24.1
pytest: None
pip: 19.0.2
setuptools: 40.8.0
Cython: None
numpy: 1.16.1
scipy: 1.2.1
pyarrow: None
xarray: None
IPython: 7.2.0
sphinx: None
patsy: 0.5.1
dateutil: 2.8.0
pytz: 2018.9
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: 3.0.2
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml.etree: 4.3.1
bs4: 4.7.1
html5lib: 1.0.1
sqlalchemy: 1.2.17
pymysql: None
psycopg2: 2.7.7 (dt dec pq3 ext lo64)
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
gcsfs: None