Skip to content

Commit e4d541f

Browse files
committed
TST: regression tests for interpolate(method='time') with nullable dtypes (GH#40252)
1 parent 1028791 commit e4d541f

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

pandas/tests/frame/methods/test_interpolate.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
NaT,
1111
Series,
1212
date_range,
13+
NA,
1314
)
1415
import pandas._testing as tm
1516

@@ -440,3 +441,41 @@ def test_interpolate_arrow(self, dtype):
440441
result = df.interpolate(limit=2)
441442
expected = DataFrame({"a": [1, 1.5, 2.0, None, 3]}, dtype="float64[pyarrow]")
442443
tm.assert_frame_equal(result, expected)
444+
445+
def test_interpolate_time_with_nullable_int64(self, frame_or_series):
446+
# GH#40252 regression: method="time" should work with nullable Int64
447+
idx = date_range("2024-01-01", periods=3, freq="D")
448+
ser = Series([1, NA, 3], dtype="Int64", index=idx)
449+
450+
res = frame_or_series(ser).interpolate(method="time")
451+
452+
expected_ser = Series([1.0, 2.0, 3.0], dtype="Float64", index=idx)
453+
expected = frame_or_series(expected_ser)
454+
tm.assert_equal(res, expected)
455+
456+
def test_interpolate_time_with_nullable_float64(self, frame_or_series):
457+
# GH#40252 regression: method="time" with nullable Float64
458+
idx = date_range("2024-02-01", periods=3, freq="D")
459+
ser = Series([1.5, NA, 3.5], dtype="Float64", index=idx)
460+
461+
res = frame_or_series(ser).interpolate(method="time")
462+
463+
expected_ser = Series([1.5, 2.5, 3.5], dtype="Float64", index=idx)
464+
expected = frame_or_series(expected_ser)
465+
tm.assert_equal(res, expected)
466+
467+
def test_interpolate_time_with_nullable_int64_unsorted_index(self, frame_or_series):
468+
# Ensure correctness when the DatetimeIndex is unsorted
469+
idx_sorted = date_range("2024-03-01", periods=3, freq="D") # 1st, 2nd, 3rd
470+
idx_unsorted = idx_sorted[[2, 0, 1]] # 3rd, 1st, 2nd
471+
472+
# values aligned with idx_unsorted: 3, 1, NA (dtype EA Int64)
473+
ser_unsorted = Series([3, 1, NA], dtype="Int64", index=idx_unsorted)
474+
475+
res = frame_or_series(ser_unsorted).interpolate(method="time")
476+
477+
# Expected: equivalent to sorting by time, interpolating, then restoring order
478+
expected_sorted = Series([1.0, 2.0, 3.0], dtype="Float64", index=idx_sorted)
479+
expected_ser = expected_sorted.reindex(idx_unsorted)
480+
expected = frame_or_series(expected_ser)
481+
tm.assert_equal(res, expected)

0 commit comments

Comments
 (0)