diff --git a/pandas/core/series.py b/pandas/core/series.py index 3a7a7d0f49b66..3439aeb79e174 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -3180,14 +3180,15 @@ def interpolate(self, method='linear'): invalid = isnull(values) valid = -invalid - firstIndex = valid.argmax() - valid = valid[firstIndex:] - invalid = invalid[firstIndex:] - inds = inds[firstIndex:] - result = values.copy() - result[firstIndex:][invalid] = np.interp(inds[invalid], inds[valid], - values[firstIndex:][valid]) + if valid.any(): + firstIndex = valid.argmax() + valid = valid[firstIndex:] + invalid = invalid[firstIndex:] + inds = inds[firstIndex:] + + result[firstIndex:][invalid] = np.interp( + inds[invalid], inds[valid], values[firstIndex:][valid]) return Series(result, index=self.index, name=self.name) diff --git a/pandas/tests/test_series.py b/pandas/tests/test_series.py index e1589b9499757..58ca34b73b6a0 100644 --- a/pandas/tests/test_series.py +++ b/pandas/tests/test_series.py @@ -4063,6 +4063,13 @@ def test_interpolate(self): # try time interpolation on a non-TimeSeries self.assertRaises(Exception, self.series.interpolate, method='time') + def test_interpolate_corners(self): + s = Series([np.nan, np.nan]) + assert_series_equal(s.interpolate(), s) + + s = Series([]).interpolate() + assert_series_equal(s.interpolate(), s) + def test_interpolate_index_values(self): s = Series(np.nan, index=np.sort(np.random.rand(30))) s[::3] = np.random.randn(10)