diff --git a/pandas/core/indexes/range.py b/pandas/core/indexes/range.py index f37faa4ab844b..b0911cc0ce556 100644 --- a/pandas/core/indexes/range.py +++ b/pandas/core/indexes/range.py @@ -46,6 +46,7 @@ from pandas.core.indexes.numeric import ( Float64Index, Int64Index, + NumericIndex, ) from pandas.core.ops.common import unpack_zerodim_and_defer @@ -55,7 +56,7 @@ _empty_range = range(0) -class RangeIndex(Int64Index): +class RangeIndex(NumericIndex): """ Immutable Index implementing a monotonic integer range. @@ -97,6 +98,7 @@ class RangeIndex(Int64Index): _typ = "rangeindex" _engine_type = libindex.Int64Engine + _can_hold_na = False _range: range # -------------------------------------------------------------------- @@ -381,6 +383,10 @@ def __contains__(self, key: Any) -> bool: return False return key in self._range + @property + def inferred_type(self) -> str: + return "integer" + # -------------------------------------------------------------------- # Indexing Methods diff --git a/pandas/io/feather_format.py b/pandas/io/feather_format.py index 3999f91a7b141..d032c54395c6d 100644 --- a/pandas/io/feather_format.py +++ b/pandas/io/feather_format.py @@ -56,7 +56,7 @@ def to_feather( # validate that we have only a default index # raise on anything else as we don't serialize the index - if not isinstance(df.index, Int64Index): + if not isinstance(df.index, (Int64Index, RangeIndex)): typ = type(df.index) raise ValueError( f"feather does not support serializing {typ} " diff --git a/pandas/tests/indexes/common.py b/pandas/tests/indexes/common.py index e5a24e9b938e2..ab2b2db7eec53 100644 --- a/pandas/tests/indexes/common.py +++ b/pandas/tests/indexes/common.py @@ -516,7 +516,7 @@ def test_hasnans_isnans(self, index_flat): return elif isinstance(index, DatetimeIndexOpsMixin): values[1] = iNaT - elif isinstance(index, (Int64Index, UInt64Index)): + elif isinstance(index, (Int64Index, UInt64Index, RangeIndex)): return else: values[1] = np.nan @@ -555,7 +555,7 @@ def test_fillna(self, index): if isinstance(index, DatetimeIndexOpsMixin): values[1] = iNaT - elif isinstance(index, (Int64Index, UInt64Index)): + elif isinstance(index, (Int64Index, UInt64Index, RangeIndex)): return else: values[1] = np.nan diff --git a/pandas/tests/indexes/test_numpy_compat.py b/pandas/tests/indexes/test_numpy_compat.py index 1ee7c5547ecf9..59c30c3abac03 100644 --- a/pandas/tests/indexes/test_numpy_compat.py +++ b/pandas/tests/indexes/test_numpy_compat.py @@ -12,6 +12,7 @@ Index, Int64Index, PeriodIndex, + RangeIndex, TimedeltaIndex, UInt64Index, ) @@ -55,7 +56,7 @@ def test_numpy_ufuncs_basic(index, func): with tm.external_error_raised((TypeError, AttributeError)): with np.errstate(all="ignore"): func(index) - elif isinstance(index, (Float64Index, Int64Index, UInt64Index)): + elif isinstance(index, (Float64Index, Int64Index, UInt64Index, RangeIndex)): # coerces to float (e.g. np.sin) with np.errstate(all="ignore"): result = func(index) @@ -104,7 +105,7 @@ def test_numpy_ufuncs_other(index, func, request): with tm.external_error_raised(TypeError): func(index) - elif isinstance(index, (Float64Index, Int64Index, UInt64Index)): + elif isinstance(index, (Float64Index, Int64Index, UInt64Index, RangeIndex)): # Results in bool array result = func(index) assert isinstance(result, np.ndarray)