Skip to content

Commit 333ead6

Browse files
committed
Merge pull request #3840 from lodagro/issue_3674
BUG: fix Series.interpolate() corner cases, close #3674
2 parents e7488f1 + 4047e9f commit 333ead6

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
@@ -4007,6 +4007,13 @@ def test_interpolate(self):
40074007
# try time interpolation on a non-TimeSeries
40084008
self.assertRaises(Exception, self.series.interpolate, method='time')
40094009

4010+
def test_interpolate_corners(self):
4011+
s = Series([np.nan, np.nan])
4012+
assert_series_equal(s.interpolate(), s)
4013+
4014+
s = Series([]).interpolate()
4015+
assert_series_equal(s.interpolate(), s)
4016+
40104017
def test_interpolate_index_values(self):
40114018
s = Series(np.nan, index=np.sort(np.random.rand(30)))
40124019
s[::3] = np.random.randn(10)

0 commit comments

Comments
 (0)