Skip to content

Commit 4f5ae07

Browse files
committed
BUG: SparseSeries.dropna should point to special function, return dense Series in case of NA fill value, GH #730
1 parent fe0d5f7 commit 4f5ae07

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

pandas/core/series.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2051,7 +2051,7 @@ def dropna(self):
20512051
"""
20522052
return remove_na(self)
20532053

2054-
valid = dropna
2054+
valid = lambda self: self.dropna()
20552055

20562056
isnull = isnull
20572057
notnull = notnull

pandas/sparse/series.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,13 +456,16 @@ def _attach_meta(self, sparse_arr):
456456
sparse_series.name = self.name
457457
return sparse_series
458458

459-
def valid(self):
459+
def dropna(self):
460460
"""
461-
Analogous to Series.valid
461+
Analogous to Series.dropna. If fill_value=NaN, returns a dense Series
462462
"""
463463
# TODO: make more efficient
464464
dense_valid = self.to_dense().valid()
465-
return dense_valid.to_sparse(fill_value=self.fill_value)
465+
if isnull(self.fill_value):
466+
return dense_valid
467+
else:
468+
return dense_valid.to_sparse(fill_value=self.fill_value)
466469

467470
def shift(self, periods, offset=None, timeRule=None):
468471
"""

pandas/sparse/tests/test_sparse.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from pandas import Series, DataFrame, DateRange, Panel
1818
from pandas.core.datetools import BDay
1919
import pandas.core.datetools as datetools
20-
import pandas.util.testing as testing
20+
import pandas.util.testing as tm
2121

2222
import pandas.sparse.frame as spf
2323

@@ -560,7 +560,7 @@ def _compare_all(obj):
560560
series.fill_value = 2
561561
_compare_all(series)
562562

563-
def test_valid(self):
563+
def test_dropna(self):
564564
sp = SparseSeries([0, 0, 0, nan, nan, 5, 6],
565565
fill_value=0)
566566

@@ -570,6 +570,11 @@ def test_valid(self):
570570
self.assert_(sp_valid.index.equals(sp.to_dense().valid().index))
571571
self.assertEquals(len(sp_valid.sp_values), 2)
572572

573+
result = self.bseries.dropna()
574+
expected = self.bseries.to_dense().dropna()
575+
self.assert_(not isinstance(result, SparseSeries))
576+
tm.assert_series_equal(result, expected)
577+
573578
def test_homogenize(self):
574579
def _check_matches(indices, expected):
575580
data = {}
@@ -789,7 +794,7 @@ def test_dense_to_sparse(self):
789794
self.assert_(isinstance(sdf, SparseDataFrame))
790795
self.assert_(np.isnan(sdf.default_fill_value))
791796
self.assert_(isinstance(sdf['A'].sp_index, BlockIndex))
792-
testing.assert_frame_equal(sdf.to_dense(), df)
797+
tm.assert_frame_equal(sdf.to_dense(), df)
793798

794799
sdf = df.to_sparse(kind='integer')
795800
self.assert_(isinstance(sdf['A'].sp_index, IntIndex))
@@ -798,7 +803,7 @@ def test_dense_to_sparse(self):
798803
'B' : [1, 2, 0, 0, 0]}, dtype=float)
799804
sdf = df.to_sparse(fill_value=0)
800805
self.assertEquals(sdf.default_fill_value, 0)
801-
testing.assert_frame_equal(sdf.to_dense(), df)
806+
tm.assert_frame_equal(sdf.to_dense(), df)
802807

803808
def test_sparse_to_dense(self):
804809
pass

0 commit comments

Comments
 (0)