Sum of TimedeltaIndex raises TypeError: len() of unsized object · Issue #25282 · pandas-dev/pandas (original) (raw)
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) in 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