diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index e25119162368f..0f9a0052c18d0 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -65,7 +65,7 @@ def _new_PeriodIndex(cls, **d): wrap=True, ) @inherit_names(["is_leap_year", "_format_native_types"], PeriodArray) -class PeriodIndex(DatetimeIndexOpsMixin, Int64Index): +class PeriodIndex(DatetimeIndexOpsMixin): """ Immutable ndarray holding ordinal values indicating regular periods in time. @@ -436,8 +436,7 @@ def join(self, other, how="left", level=None, return_indexers=False, sort=False) ) # _assert_can_do_setop ensures we have matching dtype - result = Int64Index.join( - self, + result = super().join( other, how=how, level=level, diff --git a/pandas/io/pytables.py b/pandas/io/pytables.py index 21f7899f24b51..d7ee4acc2e670 100644 --- a/pandas/io/pytables.py +++ b/pandas/io/pytables.py @@ -44,6 +44,7 @@ is_list_like, is_string_dtype, is_timedelta64_dtype, + needs_i8_conversion, ) from pandas.core.dtypes.missing import array_equivalent @@ -4771,7 +4772,7 @@ def _convert_index(name: str, index: Index, encoding: str, errors: str) -> Index kind = _dtype_to_kind(dtype_name) atom = DataIndexableCol._get_atom(converted) - if isinstance(index, Int64Index): + if isinstance(index, Int64Index) or needs_i8_conversion(index.dtype): # Includes Int64Index, RangeIndex, DatetimeIndex, TimedeltaIndex, PeriodIndex, # in which case "kind" is "integer", "integer", "datetime64", # "timedelta64", and "integer", respectively.