diff --git a/doc/source/sparse.rst b/doc/source/sparse.rst index 2496335dc7b71..db9734edde482 100644 --- a/doc/source/sparse.rst +++ b/doc/source/sparse.rst @@ -90,6 +90,8 @@ can be converted back to a regular ndarray by calling ``to_dense``: SparseList ---------- +.. note:: The ``SparseList`` class has been deprecated and will be removed in a future version. + ``SparseList`` is a list-like data structure for managing a dynamic collection of SparseArrays. To create one, simply call the ``SparseList`` constructor with a ``fill_value`` (defaulting to ``NaN``): diff --git a/doc/source/whatsnew/v0.19.0.txt b/doc/source/whatsnew/v0.19.0.txt index e3cdefd36b0be..2a31327c45ded 100644 --- a/doc/source/whatsnew/v0.19.0.txt +++ b/doc/source/whatsnew/v0.19.0.txt @@ -779,6 +779,7 @@ Deprecations - ``Categorical.reshape`` has been deprecated and will be removed in a subsequent release (:issue:`12882`) - ``Series.reshape`` has been deprecated and will be removed in a subsequent release (:issue:`12882`) +- ``SparseList`` has been deprecated and will be removed in a future version (:issue:`13784`) - ``DataFrame.to_html()`` and ``DataFrame.to_latex()`` have dropped the ``colSpace`` parameter in favor of ``col_space`` (:issue:`13857`) - ``DataFrame.to_sql()`` has deprecated the ``flavor`` parameter, as it is superfluous when SQLAlchemy is not installed (:issue:`13611`) - ``compact_ints`` and ``use_unsigned`` have been deprecated in ``pd.read_csv()`` and will be removed in a future version (:issue:`13320`) diff --git a/pandas/sparse/list.py b/pandas/sparse/list.py index 666dae8071053..82de8cd7d3959 100644 --- a/pandas/sparse/list.py +++ b/pandas/sparse/list.py @@ -1,3 +1,4 @@ +import warnings import numpy as np from pandas.core.base import PandasObject from pandas.formats.printing import pprint_thing @@ -20,6 +21,11 @@ class SparseList(PandasObject): """ def __init__(self, data=None, fill_value=np.nan): + + # see gh-13784 + warnings.warn("SparseList is deprecated and will be removed " + "in a future version", FutureWarning, stacklevel=2) + self.fill_value = fill_value self._chunks = [] diff --git a/pandas/sparse/tests/test_list.py b/pandas/sparse/tests/test_list.py index 5f8627103e18b..0b933b4f9c6f2 100644 --- a/pandas/sparse/tests/test_list.py +++ b/pandas/sparse/tests/test_list.py @@ -16,83 +16,99 @@ def setUp(self): self.na_data = np.array([nan, nan, 1, 2, 3, nan, 4, 5, nan, 6]) self.zero_data = np.array([0, 0, 1, 2, 3, 0, 4, 5, 0, 6]) + def test_deprecation(self): + # see gh-13784 + with tm.assert_produces_warning(FutureWarning): + SparseList() + def test_constructor(self): - lst1 = SparseList(self.na_data[:5]) - exp = SparseList() + with tm.assert_produces_warning(FutureWarning): + lst1 = SparseList(self.na_data[:5]) + with tm.assert_produces_warning(FutureWarning): + exp = SparseList() + exp.append(self.na_data[:5]) tm.assert_sp_list_equal(lst1, exp) def test_len(self): - arr = self.na_data - splist = SparseList() - splist.append(arr[:5]) - self.assertEqual(len(splist), 5) - splist.append(arr[5]) - self.assertEqual(len(splist), 6) - splist.append(arr[6:]) - self.assertEqual(len(splist), 10) + with tm.assert_produces_warning(FutureWarning): + arr = self.na_data + splist = SparseList() + splist.append(arr[:5]) + self.assertEqual(len(splist), 5) + splist.append(arr[5]) + self.assertEqual(len(splist), 6) + splist.append(arr[6:]) + self.assertEqual(len(splist), 10) def test_append_na(self): - arr = self.na_data - splist = SparseList() - splist.append(arr[:5]) - splist.append(arr[5]) - splist.append(arr[6:]) + with tm.assert_produces_warning(FutureWarning): + arr = self.na_data + splist = SparseList() + splist.append(arr[:5]) + splist.append(arr[5]) + splist.append(arr[6:]) - sparr = splist.to_array() - tm.assert_sp_array_equal(sparr, SparseArray(arr)) + sparr = splist.to_array() + tm.assert_sp_array_equal(sparr, SparseArray(arr)) def test_append_zero(self): - arr = self.zero_data - splist = SparseList(fill_value=0) - splist.append(arr[:5]) - splist.append(arr[5]) - splist.append(arr[6:]) + with tm.assert_produces_warning(FutureWarning): + arr = self.zero_data + splist = SparseList(fill_value=0) + splist.append(arr[:5]) + splist.append(arr[5]) + splist.append(arr[6:]) - sparr = splist.to_array() - tm.assert_sp_array_equal(sparr, SparseArray(arr, fill_value=0)) + sparr = splist.to_array() + tm.assert_sp_array_equal(sparr, SparseArray(arr, fill_value=0)) def test_consolidate(self): - arr = self.na_data - exp_sparr = SparseArray(arr) + with tm.assert_produces_warning(FutureWarning, + check_stacklevel=False): + arr = self.na_data + exp_sparr = SparseArray(arr) - splist = SparseList() - splist.append(arr[:5]) - splist.append(arr[5]) - splist.append(arr[6:]) + splist = SparseList() + splist.append(arr[:5]) + splist.append(arr[5]) + splist.append(arr[6:]) - consol = splist.consolidate(inplace=False) - self.assertEqual(consol.nchunks, 1) - self.assertEqual(splist.nchunks, 3) - tm.assert_sp_array_equal(consol.to_array(), exp_sparr) + consol = splist.consolidate(inplace=False) + self.assertEqual(consol.nchunks, 1) + self.assertEqual(splist.nchunks, 3) + tm.assert_sp_array_equal(consol.to_array(), exp_sparr) - splist.consolidate() - self.assertEqual(splist.nchunks, 1) - tm.assert_sp_array_equal(splist.to_array(), exp_sparr) + splist.consolidate() + self.assertEqual(splist.nchunks, 1) + tm.assert_sp_array_equal(splist.to_array(), exp_sparr) def test_copy(self): - arr = self.na_data - exp_sparr = SparseArray(arr) + with tm.assert_produces_warning(FutureWarning, + check_stacklevel=False): + arr = self.na_data + exp_sparr = SparseArray(arr) - splist = SparseList() - splist.append(arr[:5]) - splist.append(arr[5]) + splist = SparseList() + splist.append(arr[:5]) + splist.append(arr[5]) - cp = splist.copy() - cp.append(arr[6:]) - self.assertEqual(splist.nchunks, 2) - tm.assert_sp_array_equal(cp.to_array(), exp_sparr) + cp = splist.copy() + cp.append(arr[6:]) + self.assertEqual(splist.nchunks, 2) + tm.assert_sp_array_equal(cp.to_array(), exp_sparr) def test_getitem(self): - arr = self.na_data - splist = SparseList() - splist.append(arr[:5]) - splist.append(arr[5]) - splist.append(arr[6:]) - - for i in range(len(arr)): - tm.assert_almost_equal(splist[i], arr[i]) - tm.assert_almost_equal(splist[-i], arr[-i]) + with tm.assert_produces_warning(FutureWarning): + arr = self.na_data + splist = SparseList() + splist.append(arr[:5]) + splist.append(arr[5]) + splist.append(arr[6:]) + + for i in range(len(arr)): + tm.assert_almost_equal(splist[i], arr[i]) + tm.assert_almost_equal(splist[-i], arr[-i]) if __name__ == '__main__':