Skip to content

Commit 71a633d

Browse files
committed
BUG: Fix SparseFrameAccessor.to_dense return type
1 parent 139def2 commit 71a633d

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

doc/source/whatsnew/v3.0.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ Sparse
682682
^^^^^^
683683
- Bug in :class:`SparseDtype` for equal comparison with na fill value. (:issue:`54770`)
684684
- Bug in :meth:`DataFrame.sparse.from_spmatrix` which hard coded an invalid ``fill_value`` for certain subtypes. (:issue:`59063`)
685+
- Bug in :meth:`DataFrams.sparse.to_dense` which ignored subclassing and always returned an instance of :class:`DataFrame` (:issue:`59913`)
685686

686687
ExtensionArray
687688
^^^^^^^^^^^^^^

pandas/core/arrays/sparse/accessor.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,9 @@ def to_dense(self) -> DataFrame:
369369
1 1
370370
2 0
371371
"""
372-
from pandas import DataFrame
373-
372+
constructor = self._parent._constructor
374373
data = {k: v.array.to_dense() for k, v in self._parent.items()}
375-
return DataFrame(data, index=self._parent.index, columns=self._parent.columns)
374+
return constructor(data, index=self._parent.index, columns=self._parent.columns)
376375

377376
def to_coo(self) -> spmatrix:
378377
"""

pandas/tests/arrays/sparse/test_accessor.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,3 +252,12 @@ def test_with_column_named_sparse(self):
252252
# https://github.com/pandas-dev/pandas/issues/30758
253253
df = pd.DataFrame({"sparse": pd.arrays.SparseArray([1, 2])})
254254
assert isinstance(df.sparse, pd.core.arrays.sparse.accessor.SparseFrameAccessor)
255+
256+
def test_subclassing(self):
257+
class SubclassedDataFrame(pd.DataFrame):
258+
@property
259+
def _constructor(self):
260+
return SubclassedDataFrame
261+
262+
df = SubclassedDataFrame({"sparse": pd.arrays.SparseArray([1, 2])})
263+
assert isinstance(df.sparse.to_dense(), SubclassedDataFrame)

0 commit comments

Comments
 (0)