diff --git a/doc/source/whatsnew/v0.16.2.txt b/doc/source/whatsnew/v0.16.2.txt index b571aab0b19a5..8e30e90087bcb 100644 --- a/doc/source/whatsnew/v0.16.2.txt +++ b/doc/source/whatsnew/v0.16.2.txt @@ -80,6 +80,6 @@ Bug Fixes - Bug in GroupBy.get_group raises ValueError when group key contains NaT (:issue:`6992`) - +- Bug in ``SparseSeries`` constructor ignores input data name (:issue:`10258`) - Bug where infer_freq infers timerule (WOM-5XXX) unsupported by to_offset (:issue:`9425`) diff --git a/pandas/sparse/series.py b/pandas/sparse/series.py index f53cc66bee961..24d06970f4741 100644 --- a/pandas/sparse/series.py +++ b/pandas/sparse/series.py @@ -121,6 +121,9 @@ def __init__(self, data=None, index=None, sparse_index=None, kind='block', if data is None: data = [] + if isinstance(data, Series) and name is None: + name = data.name + is_sparse_array = isinstance(data, SparseArray) if fill_value is None: if is_sparse_array: diff --git a/pandas/sparse/tests/test_sparse.py b/pandas/sparse/tests/test_sparse.py index a7a78ba226a0b..96e5ff87fbb0c 100644 --- a/pandas/sparse/tests/test_sparse.py +++ b/pandas/sparse/tests/test_sparse.py @@ -128,14 +128,15 @@ def setUp(self): date_index = bdate_range('1/1/2011', periods=len(index)) - self.bseries = SparseSeries(arr, index=index, kind='block') - self.bseries.name = 'bseries' + self.bseries = SparseSeries(arr, index=index, kind='block', + name='bseries') self.ts = self.bseries self.btseries = SparseSeries(arr, index=date_index, kind='block') - self.iseries = SparseSeries(arr, index=index, kind='integer') + self.iseries = SparseSeries(arr, index=index, kind='integer', + name='iseries') arr, index = _test_data2() self.bseries2 = SparseSeries(arr, index=index, kind='block') @@ -143,7 +144,7 @@ def setUp(self): arr, index = _test_data1_zero() self.zbseries = SparseSeries(arr, index=index, kind='block', - fill_value=0) + fill_value=0, name='zbseries') self.ziseries = SparseSeries(arr, index=index, kind='integer', fill_value=0) @@ -234,12 +235,21 @@ def test_constructor(self): self.bseries.to_dense().fillna(0).values) # pass SparseSeries - s2 = SparseSeries(self.bseries) - s3 = SparseSeries(self.iseries) - s4 = SparseSeries(self.zbseries) - assert_sp_series_equal(s2, self.bseries) - assert_sp_series_equal(s3, self.iseries) - assert_sp_series_equal(s4, self.zbseries) + def _check_const(sparse, name): + # use passed series name + result = SparseSeries(sparse) + assert_sp_series_equal(result, sparse) + self.assertEqual(sparse.name, name) + self.assertEqual(result.name, name) + + # use passed name + result = SparseSeries(sparse, name='x') + assert_sp_series_equal(result, sparse) + self.assertEqual(result.name, 'x') + + _check_const(self.bseries, 'bseries') + _check_const(self.iseries, 'iseries') + _check_const(self.zbseries, 'zbseries') # Sparse time series works date_index = bdate_range('1/1/2000', periods=len(self.bseries))