Skip to content

Commit 428f230

Browse files
committed
sparse
1 parent 381b073 commit 428f230

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

pandas/core/internals/blocks.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
is_list_like,
3737
is_re,
3838
is_re_compilable,
39+
is_sparse,
3940
pandas_dtype)
4041
from pandas.core.dtypes.cast import (
4142
maybe_downcast_to_dtype,
@@ -633,7 +634,9 @@ def _astype(self, dtype, copy=False, errors='raise', values=None,
633634
return self
634635

635636
if klass is None:
636-
if dtype == np.object_:
637+
# sparse is "special" and preserves sparsity.
638+
# We're changing this in GH-23125
639+
if dtype == np.object_ and is_sparse(values):
637640
klass = ObjectBlock
638641
elif is_extension_array_dtype(dtype):
639642
klass = ExtensionBlock

pandas/tests/sparse/frame/test_frame.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,16 @@ def test_astype_bool(self):
736736
assert res['A'].dtype == SparseDtype(np.bool)
737737
assert res['B'].dtype == SparseDtype(np.bool)
738738

739+
def test_astype_object(self):
740+
# This may change in GH-23125
741+
df = pd.DataFrame({"A": SparseArray([0, 1]),
742+
"B": SparseArray([0, 1])})
743+
result = df.astype(object)
744+
dtype = SparseDtype(object, 0)
745+
expected = pd.DataFrame({"A": SparseArray([0, 1], dtype=dtype),
746+
"B": SparseArray([0, 1], dtype=dtype)})
747+
tm.assert_frame_equal(result, expected)
748+
739749
def test_fillna(self, float_frame_fill0, float_frame_fill0_dense):
740750
df = float_frame_fill0.reindex(lrange(5))
741751
dense = float_frame_fill0_dense.reindex(lrange(5))

0 commit comments

Comments
 (0)