Skip to content

Commit cc2c70b

Browse files
committed
Merge pull request #5977 from TomAugspurger/interpolate-datetime
BUG: Allow DatetimeIndex for scipy interpolate
2 parents 611bab3 + 8aa4c09 commit cc2c70b

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

doc/source/release.rst

+1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ Bug Fixes
115115
incorrectly (:issue:`5947`)
116116
- Fixed ``to_datetime`` for array with both Tz-aware datetimes and ``NaT``s (:issue:`5961`)
117117
- Bug in rolling skew/kurtosis when passed a Series with bad data (:issue:`5749`)
118+
- Bug in scipy ``interpolate`` methods with a datetime index (:issue: `5975`)
118119

119120
pandas 0.13.0
120121
-------------

pandas/core/common.py

+5
Original file line numberDiff line numberDiff line change
@@ -1401,6 +1401,7 @@ def _interpolate_scipy_wrapper(x, y, new_x, method, fill_value=None,
14011401
"""
14021402
try:
14031403
from scipy import interpolate
1404+
from pandas import DatetimeIndex
14041405
except ImportError:
14051406
raise ImportError('{0} interpolation requires Scipy'.format(method))
14061407

@@ -1413,6 +1414,10 @@ def _interpolate_scipy_wrapper(x, y, new_x, method, fill_value=None,
14131414
'piecewise_polynomial': interpolate.piecewise_polynomial_interpolate,
14141415
}
14151416

1417+
if hasattr(x, 'asi8'):
1418+
# GH 5975, scipy.interp1d can't hande datetime64s
1419+
x, new_x = x.values.view('i8'), new_x.view('i8')
1420+
14161421
try:
14171422
alt_methods['pchip'] = interpolate.pchip_interpolate
14181423
except AttributeError:

pandas/tests/test_generic.py

+7
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,13 @@ def test_interp_nonmono_raise(self):
587587
with tm.assertRaises(ValueError):
588588
s.interpolate(method='krogh')
589589

590+
def test_interp_datetime64(self):
591+
_skip_if_no_scipy()
592+
df = Series([1, np.nan, 3], index=date_range('1/1/2000', periods=3))
593+
result = df.interpolate(method='nearest')
594+
expected = Series([1, 1, 3], index=date_range('1/1/2000', periods=3))
595+
assert_series_equal(result, expected)
596+
590597
class TestDataFrame(tm.TestCase, Generic):
591598
_typ = DataFrame
592599
_comparator = lambda self, x, y: assert_frame_equal(x,y)

0 commit comments

Comments
 (0)