diff --git a/pandas/core/arrays/categorical.py b/pandas/core/arrays/categorical.py index 16fcf6daf5aef..9cfcd0adc92ec 100644 --- a/pandas/core/arrays/categorical.py +++ b/pandas/core/arrays/categorical.py @@ -509,7 +509,7 @@ def astype(self, dtype: AstypeArg, copy: bool = True) -> ArrayLike: result = self.copy() if copy else self elif is_categorical_dtype(dtype): - dtype = cast(Union[str, CategoricalDtype], dtype) + dtype = cast("Union[str, CategoricalDtype]", dtype) # GH 10696/18593/18630 dtype = self.dtype.update_dtype(dtype) diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index 33da9ca858a4c..bb208785f46fa 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -331,10 +331,13 @@ def __getitem__( This getitem defers to the underlying array, which by-definition can only handle list-likes, slices, and integer scalars """ - # Use cast as we know we will get back a DatetimeLikeArray or DTScalar + # Use cast as we know we will get back a DatetimeLikeArray or DTScalar, + # but skip evaluating the Union at runtime for performance + # (see https://github.com/pandas-dev/pandas/pull/44624) result = cast( - Union[DatetimeLikeArrayT, DTScalarOrNaT], super().__getitem__(key) + "Union[DatetimeLikeArrayT, DTScalarOrNaT]", super().__getitem__(key) ) + result = super().__getitem__(key) if lib.is_scalar(result): return result else: