Skip to content

Remove SparseSeries and SparseDataFrame #28425

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 36 commits into from
Sep 18, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
acf5f2f
CLN: Remove sparse
TomAugspurger Sep 12, 2019
5418dd5
round 2
TomAugspurger Sep 12, 2019
f61b5e3
Round 3
TomAugspurger Sep 13, 2019
238db69
round 4
TomAugspurger Sep 13, 2019
7448795
remove hdf
TomAugspurger Sep 13, 2019
f285272
some more
TomAugspurger Sep 13, 2019
b6fb1aa
cleanup
TomAugspurger Sep 13, 2019
c476b21
note
TomAugspurger Sep 13, 2019
fc34fe8
fixups
TomAugspurger Sep 13, 2019
3cc4765
pickle changes
TomAugspurger Sep 13, 2019
766a2f2
pickle compat
TomAugspurger Sep 13, 2019
dd51140
skip feather
TomAugspurger Sep 13, 2019
129e89e
fixups
TomAugspurger Sep 13, 2019
5b711c6
Merge remote-tracking branch 'upstream/master' into remove-sparse
TomAugspurger Sep 13, 2019
075bfd2
cleanups
TomAugspurger Sep 13, 2019
2b58e53
black
TomAugspurger Sep 13, 2019
413347f
to_sparse docs
TomAugspurger Sep 13, 2019
d5828e3
doc note
TomAugspurger Sep 13, 2019
047773e
rm sparse frame
TomAugspurger Sep 13, 2019
2d8d195
rm sparse series
TomAugspurger Sep 13, 2019
fa508c1
docs
TomAugspurger Sep 13, 2019
9b61370
doc
TomAugspurger Sep 13, 2019
0c530ae
remove new pickle
TomAugspurger Sep 13, 2019
5d55a49
Update v0.25.0.rst
TomAugspurger Sep 13, 2019
58b848a
Update v0.25.0.rst
TomAugspurger Sep 13, 2019
7a7e2d3
Merge remote-tracking branch 'upstream/master' into remove-sparse
TomAugspurger Sep 16, 2019
f1afc8f
added new legacy pickle files
TomAugspurger Sep 16, 2019
7742e36
Merge remote-tracking branch 'upstream/master' into remove-sparse
TomAugspurger Sep 17, 2019
008931a
shim
TomAugspurger Sep 17, 2019
04bf466
shim
TomAugspurger Sep 17, 2019
a4a21ae
revert io changes
TomAugspurger Sep 17, 2019
a8b0d65
warning for sparse
TomAugspurger Sep 17, 2019
77b7da3
Fixup typing
TomAugspurger Sep 17, 2019
d265ba9
format
TomAugspurger Sep 17, 2019
c2a9514
fixup typing
TomAugspurger Sep 17, 2019
0c02b2a
0.24.0 todo
TomAugspurger Sep 17, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fixups
  • Loading branch information
TomAugspurger committed Sep 13, 2019
commit fc34fe8bf1b155b05733e14c690eac05690057d9
70 changes: 0 additions & 70 deletions pandas/core/ops/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1106,76 +1106,6 @@ def f(self, other):
# Sparse


def _cast_sparse_series_op(left, right, opname):
"""
For SparseSeries operation, coerce to float64 if the result is expected
to have NaN or inf values

Parameters
----------
left : SparseArray
right : SparseArray
opname : str

Returns
-------
left : SparseArray
right : SparseArray
"""
from pandas.core.sparse.api import SparseDtype

opname = opname.strip("_")

# TODO: This should be moved to the array?
if is_integer_dtype(left) and is_integer_dtype(right):
# series coerces to float64 if result should have NaN/inf
if opname in ("floordiv", "mod") and (right.to_dense() == 0).any():
left = left.astype(SparseDtype(np.float64, left.fill_value))
right = right.astype(SparseDtype(np.float64, right.fill_value))
elif opname in ("rfloordiv", "rmod") and (left.to_dense() == 0).any():
left = left.astype(SparseDtype(np.float64, left.fill_value))
right = right.astype(SparseDtype(np.float64, right.fill_value))

return left, right


def _arith_method_SPARSE_SERIES(cls, op, special):
"""
Wrapper function for Series arithmetic operations, to avoid
code duplication.
"""
op_name = _get_op_name(op, special)

def wrapper(self, other):
if isinstance(other, ABCDataFrame):
return NotImplemented
elif isinstance(other, ABCSeries):
return _sparse_series_op(self, other, op, op_name)
elif is_scalar(other):
with np.errstate(all="ignore"):
new_values = op(self.values, other)
return self._constructor(new_values, index=self.index, name=self.name)
else: # pragma: no cover
raise TypeError(
"operation with {other} not supported".format(other=type(other))
)

wrapper.__name__ = op_name
return wrapper


def _sparse_series_op(left, right, op, name):
left, right = left.align(right, join="outer", copy=False)
new_index = left.index
new_name = get_op_result_name(left, right)

from pandas.core.arrays.sparse import _sparse_array_op

lvalues, rvalues = _cast_sparse_series_op(left.values, right.values, name)
result = _sparse_array_op(lvalues, rvalues, op, name)
return left._constructor(result, index=new_index, name=new_name)


def maybe_dispatch_ufunc_to_dunder_op(
self: ArrayLike, ufunc: Callable, method: str, *inputs: ArrayLike, **kwargs: Any
):
Expand Down
4 changes: 3 additions & 1 deletion pandas/core/reshape/concat.py
Original file line number Diff line number Diff line change
Expand Up @@ -713,6 +713,8 @@ def _get_series_result_type(result, objs=None):
return appropriate class of Series concat
input is either dict or array-like
"""
# TODO: See if we can just inline with _constructor_expanddim
# now that sparse is removed.
from pandas import DataFrame

# concat Series with axis 1
Expand All @@ -727,5 +729,5 @@ def _get_frame_result_type(result, objs):
"""
return appropriate class of DataFrame-like concat
"""
# TODO: just inline this
# TODO: just inline this as _constructor.
return objs[0]