Skip to content

Commit 4047e9f

Browse files
committed
BUG: fix Series.interpolate() corner cases, close #3674
1 parent 58642a6 commit 4047e9f

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

pandas/core/series.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -3180,14 +3180,15 @@ def interpolate(self, method='linear'):
31803180
invalid = isnull(values)
31813181
valid = -invalid
31823182

3183-
firstIndex = valid.argmax()
3184-
valid = valid[firstIndex:]
3185-
invalid = invalid[firstIndex:]
3186-
inds = inds[firstIndex:]
3187-
31883183
result = values.copy()
3189-
result[firstIndex:][invalid] = np.interp(inds[invalid], inds[valid],
3190-
values[firstIndex:][valid])
3184+
if valid.any():
3185+
firstIndex = valid.argmax()
3186+
valid = valid[firstIndex:]
3187+
invalid = invalid[firstIndex:]
3188+
inds = inds[firstIndex:]
3189+
3190+
result[firstIndex:][invalid] = np.interp(
3191+
inds[invalid], inds[valid], values[firstIndex:][valid])
31913192

31923193
return Series(result, index=self.index, name=self.name)
31933194

pandas/tests/test_series.py

+7
Original file line numberDiff line numberDiff line change
@@ -4063,6 +4063,13 @@ def test_interpolate(self):
40634063
# try time interpolation on a non-TimeSeries
40644064
self.assertRaises(Exception, self.series.interpolate, method='time')
40654065

4066+
def test_interpolate_corners(self):
4067+
s = Series([np.nan, np.nan])
4068+
assert_series_equal(s.interpolate(), s)
4069+
4070+
s = Series([]).interpolate()
4071+
assert_series_equal(s.interpolate(), s)
4072+
40664073
def test_interpolate_index_values(self):
40674074
s = Series(np.nan, index=np.sort(np.random.rand(30)))
40684075
s[::3] = np.random.randn(10)

0 commit comments

Comments
 (0)