diff --git a/pandas/_libs/intervaltree.pxi.in b/pandas/_libs/intervaltree.pxi.in index 0b99aebbd3816..a6cec0fb30ecc 100644 --- a/pandas/_libs/intervaltree.pxi.in +++ b/pandas/_libs/intervaltree.pxi.in @@ -391,6 +391,11 @@ cdef class {{dtype_title}}Closed{{closed_title}}IntervalNode(IntervalNode): """Recursively query this node and its sub-nodes for intervals that overlap with the query point. """ + + # GH 51826: ensures nan is handled properly during reindexing + if np.isnan(point): + return + cdef: int64_t[:] indices {{dtype}}_t[:] values diff --git a/pandas/tests/indexing/interval/test_interval.py b/pandas/tests/indexing/interval/test_interval.py index 717cb7de42021..97bd16d6eb1b4 100644 --- a/pandas/tests/indexing/interval/test_interval.py +++ b/pandas/tests/indexing/interval/test_interval.py @@ -1,6 +1,8 @@ import numpy as np import pytest +from pandas.compat import IS64 + import pandas as pd from pandas import ( DataFrame, @@ -172,3 +174,19 @@ def test_mi_intervalindex_slicing_with_scalar(self): ) expected = Series([1, 6, 2, 8, 7], index=expected_index, name="value") tm.assert_series_equal(result, expected) + + @pytest.mark.xfail(not IS64, reason="GH 23440") + @pytest.mark.parametrize( + "base", + [101, 1010], + ) + def test_reindex_behavior_with_interval_index(self, base): + # GH 51826 + + ser = Series( + range(base), + index=IntervalIndex.from_arrays(range(base), range(1, base + 1)), + ) + expected_result = Series([np.nan, 0], index=[np.nan, 1.0], dtype=float) + result = ser.reindex(index=[np.nan, 1.0]) + tm.assert_series_equal(result, expected_result)