Skip to content

Commit 976cab5

Browse files
author
Chang She
committed
TST: fill with limit in sparse. BUG: limit in sparse frame. GH #1197 #993
1 parent c5421d0 commit 976cab5

File tree

2 files changed

+85
-2
lines changed

2 files changed

+85
-2
lines changed

pandas/sparse/frame.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -741,10 +741,10 @@ def apply(self, func, axis=0, broadcast=False):
741741
return self._apply_broadcast(func, axis)
742742

743743
@Appender(DataFrame.fillna.__doc__)
744-
def fillna(self, value=None, method='pad', inplace=False):
744+
def fillna(self, value=None, method='pad', inplace=False, limit=None):
745745
new_series = {}
746746
for k, v in self.iterkv():
747-
new_series[k] = v.fillna(value=value, method=method)
747+
new_series[k] = v.fillna(value=value, method=method, limit=limit)
748748

749749
if inplace:
750750
self._series = new_series

pandas/tseries/tests/test_timeseries.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,89 @@ def test_frame_fillna_limit(self):
211211
expected.values[:3] = np.nan
212212
tm.assert_frame_equal(result, expected)
213213

214+
def test_sparse_series_fillna_limit(self):
215+
index = np.arange(10)
216+
s = Series(np.random.randn(10), index=index)
217+
218+
ss = s[:2].reindex(index).to_sparse()
219+
result = ss.fillna(method='pad', limit=5)
220+
expected = ss.fillna(method='pad', limit=5)
221+
expected = expected.to_dense()
222+
expected[-3:] = np.nan
223+
expected = expected.to_sparse()
224+
assert_series_equal(result, expected)
225+
226+
ss = s[-2:].reindex(index).to_sparse()
227+
result = ss.fillna(method='backfill', limit=5)
228+
expected = ss.fillna(method='backfill')
229+
expected = expected.to_dense()
230+
expected[:3] = np.nan
231+
expected = expected.to_sparse()
232+
assert_series_equal(result, expected)
233+
234+
def test_sparse_series_pad_backfill_limit(self):
235+
index = np.arange(10)
236+
s = Series(np.random.randn(10), index=index)
237+
s = s.to_sparse()
238+
239+
result = s[:2].reindex(index, method='pad', limit=5)
240+
expected = s[:2].reindex(index).fillna(method='pad')
241+
expected = expected.to_dense()
242+
expected[-3:] = np.nan
243+
expected = expected.to_sparse()
244+
assert_series_equal(result, expected)
245+
246+
result = s[-2:].reindex(index, method='backfill', limit=5)
247+
expected = s[-2:].reindex(index).fillna(method='backfill')
248+
expected = expected.to_dense()
249+
expected[:3] = np.nan
250+
expected = expected.to_sparse()
251+
assert_series_equal(result, expected)
252+
253+
def test_sparse_frame_pad_backfill_limit(self):
254+
index = np.arange(10)
255+
df = DataFrame(np.random.randn(10, 4), index=index)
256+
sdf = df.to_sparse()
257+
258+
result = sdf[:2].reindex(index, method='pad', limit=5)
259+
260+
expected = sdf[:2].reindex(index).fillna(method='pad')
261+
expected = expected.to_dense()
262+
expected.values[-3:] = np.nan
263+
expected = expected.to_sparse()
264+
tm.assert_frame_equal(result, expected)
265+
266+
result = sdf[-2:].reindex(index, method='backfill', limit=5)
267+
268+
expected = sdf[-2:].reindex(index).fillna(method='backfill')
269+
expected = expected.to_dense()
270+
expected.values[:3] = np.nan
271+
expected = expected.to_sparse()
272+
tm.assert_frame_equal(result, expected)
273+
274+
def test_sparse_frame_fillna_limit(self):
275+
index = np.arange(10)
276+
df = DataFrame(np.random.randn(10, 4), index=index)
277+
sdf = df.to_sparse()
278+
279+
result = sdf[:2].reindex(index)
280+
result = result.fillna(method='pad', limit=5)
281+
282+
expected = sdf[:2].reindex(index).fillna(method='pad')
283+
expected = expected.to_dense()
284+
expected.values[-3:] = np.nan
285+
expected = expected.to_sparse()
286+
tm.assert_frame_equal(result, expected)
287+
288+
result = sdf[-2:].reindex(index)
289+
result = result.fillna(method='backfill', limit=5)
290+
291+
expected = sdf[-2:].reindex(index).fillna(method='backfill')
292+
expected = expected.to_dense()
293+
expected.values[:3] = np.nan
294+
expected = expected.to_sparse()
295+
tm.assert_frame_equal(result, expected)
296+
214297
def test_pad_require_monotonicity(self):
215298
rng = date_range('1/1/2000', '3/1/2000', freq='B')
216299

0 commit comments

Comments
 (0)