Closed
Description
Tried to simplify Block.quantile by arranging for it to only have to handle 2D case by having Series.quantile dispatch to DataFrame implementation. Ended up getting failures in pandas/tests/series/test_quantile.py test_quantile_sparse
ser = pd.Series([0., None, 1., 2.], dtype='Sparse[float]')
df = pd.DataFrame(ser)
>>> ser.quantile(0.5)
1.0
>>> ser.quantile([0.5])
0.5 1.0
dtype: float64
>>> df.quantile(0.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/core/frame.py", line 7760, in quantile
transposed=is_transposed)
File "pandas/core/internals/managers.py", line 500, in quantile
return self.reduction('quantile', **kwargs)
File "pandas/core/internals/managers.py", line 432, in reduction
axe, block = getattr(b, f)(axis=axis, axes=self.axes, **kwargs)
File "pandas/core/internals/blocks.py", line 1530, in quantile
result = _nanpercentile(values, qs * 100, axis=axis, **kw)
File "pandas/core/internals/blocks.py", line 1484, in _nanpercentile
mask = mask.reshape(values.shape)
AttributeError: 'SparseArray' object has no attribute 'reshape'
>>> df.quantile([0.5])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/core/frame.py", line 7760, in quantile
transposed=is_transposed)
File "pandas/core/internals/managers.py", line 500, in quantile
return self.reduction('quantile', **kwargs)
File "pandas/core/internals/managers.py", line 432, in reduction
axe, block = getattr(b, f)(axis=axis, axes=self.axes, **kwargs)
File "pandas/core/internals/blocks.py", line 1511, in quantile
axis=axis, **kw)
File "pandas/core/internals/blocks.py", line 1484, in _nanpercentile
mask = mask.reshape(values.shape)
AttributeError: 'SparseArray' object has no attribute 'reshape'
datetime64[ns, tz]
breaks in a slightly different way (presumably all ExtensionBlocks will fail):
dti = pd.date_range('2016-01-01', periods=3, tz='US/Pacific')
ser = pd.Series(dti)
df = pd.DataFrame(ser)
>>> df.quantile(0.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/core/frame.py", line 7760, in quantile
transposed=is_transposed)
File "pandas/core/internals/managers.py", line 500, in quantile
return self.reduction('quantile', **kwargs)
File "pandas/core/internals/managers.py", line 473, in reduction
values = _concat._concat_compat([b.values for b in blocks])
File "pandas/core/dtypes/concat.py", line 174, in _concat_compat
return np.concatenate(to_concat, axis=axis)
ValueError: need at least one array to concatenate
>>> df.quantile([0.5])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/core/frame.py", line 7760, in quantile
transposed=is_transposed)
File "pandas/core/internals/managers.py", line 500, in quantile
return self.reduction('quantile', **kwargs)
File "pandas/core/internals/managers.py", line 473, in reduction
values = _concat._concat_compat([b.values for b in blocks])
File "pandas/core/dtypes/concat.py", line 174, in _concat_compat
return np.concatenate(to_concat, axis=axis)
ValueError: need at least one array to concatenate
xref #24583