diff --git a/asv_bench/benchmarks/dtypes.py b/asv_bench/benchmarks/dtypes.py index a5ed5c389fee4..3efcf46955e2b 100644 --- a/asv_bench/benchmarks/dtypes.py +++ b/asv_bench/benchmarks/dtypes.py @@ -2,9 +2,10 @@ import numpy as np +import pandas as pd from pandas import DataFrame import pandas._testing as tm -from pandas.api.types import pandas_dtype +from pandas.api.types import is_extension_array_dtype, pandas_dtype from .pandas_vb_common import ( datetime_dtypes, @@ -119,4 +120,16 @@ def time_select_dtype_string_exclude(self, dtype): self.df_string.select_dtypes(exclude=dtype) +class CheckDtypes: + def setup(self): + self.ext_dtype = pd.Int64Dtype() + self.np_dtype = np.dtype("int64") + + def time_is_extension_array_dtype_true(self): + is_extension_array_dtype(self.ext_dtype) + + def time_is_extension_array_dtype_false(self): + is_extension_array_dtype(self.np_dtype) + + from .pandas_vb_common import setup # noqa: F401 isort:skip diff --git a/pandas/core/dtypes/common.py b/pandas/core/dtypes/common.py index dc6d0784df217..d24cff4ae81bb 100644 --- a/pandas/core/dtypes/common.py +++ b/pandas/core/dtypes/common.py @@ -1526,7 +1526,12 @@ def is_extension_array_dtype(arr_or_dtype) -> bool: False """ dtype = getattr(arr_or_dtype, "dtype", arr_or_dtype) - return isinstance(dtype, ExtensionDtype) or registry.find(dtype) is not None + if isinstance(dtype, ExtensionDtype): + return True + elif isinstance(dtype, np.dtype): + return False + else: + return registry.find(dtype) is not None def is_ea_or_datetimelike_dtype(dtype: Optional[DtypeObj]) -> bool: