From 2ce2f4ffe2251117bff87311118e82feba05a258 Mon Sep 17 00:00:00 2001 From: Kyle Goehner Date: Wed, 16 Oct 2019 21:47:21 -0400 Subject: [PATCH] CLN: Use ABC classes where possible --- pandas/core/indexes/base.py | 15 ++++++++++----- pandas/core/reshape/concat.py | 14 ++++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 9d6487f7a8ae4..21882a8f132d8 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -53,6 +53,7 @@ ABCDataFrame, ABCDatetimeArray, ABCDatetimeIndex, + ABCExtensionArray, ABCIndexClass, ABCMultiIndex, ABCPandasArray, @@ -65,7 +66,6 @@ from pandas.core import ops from pandas.core.accessor import CachedAccessor import pandas.core.algorithms as algos -from pandas.core.arrays import ExtensionArray from pandas.core.base import IndexOpsMixin, PandasObject import pandas.core.common as com from pandas.core.indexers import maybe_convert_indices @@ -100,7 +100,7 @@ def _make_comparison_op(op, cls): def cmp_method(self, other): - if isinstance(other, (np.ndarray, Index, ABCSeries, ExtensionArray)): + if isinstance(other, (np.ndarray, Index, ABCSeries, ABCExtensionArray)): if other.ndim > 0 and len(self) != len(other): raise ValueError("Lengths must match to compare") @@ -3840,7 +3840,7 @@ def values(self): return self._data.view(np.ndarray) @property - def _values(self) -> Union[ExtensionArray, ABCIndexClass, np.ndarray]: + def _values(self) -> Union[ABCExtensionArray, ABCIndexClass, np.ndarray]: # TODO(EA): remove index types as they become extension arrays """ The best array representation. @@ -4268,7 +4268,12 @@ def _concat_same_dtype(self, to_concat, name): Concatenate to_concat which has the same class. """ # must be overridden in specific classes - klasses = (ABCDatetimeIndex, ABCTimedeltaIndex, ABCPeriodIndex, ExtensionArray) + klasses = ( + ABCDatetimeIndex, + ABCTimedeltaIndex, + ABCPeriodIndex, + ABCExtensionArray, + ) to_concat = [ x.astype(object) if isinstance(x, klasses) else x for x in to_concat ] @@ -4631,7 +4636,7 @@ def get_value(self, series, key): # use this, e.g. DatetimeIndex # Things like `Series._get_value` (via .at) pass the EA directly here. s = getattr(series, "_values", series) - if isinstance(s, (ExtensionArray, Index)) and is_scalar(key): + if isinstance(s, (ABCExtensionArray, Index)) and is_scalar(key): # GH 20882, 21257 # Unify Index and ExtensionArray treatment # First try to convert the key to a location diff --git a/pandas/core/reshape/concat.py b/pandas/core/reshape/concat.py index 60bab817705e3..243eb9e99e1f8 100644 --- a/pandas/core/reshape/concat.py +++ b/pandas/core/reshape/concat.py @@ -6,7 +6,9 @@ import numpy as np -from pandas import DataFrame, Index, MultiIndex, Series +from pandas.core.dtypes.generic import ABCSeries + +from pandas import DataFrame, Index, MultiIndex from pandas.core import common as com from pandas.core.arrays.categorical import ( _factorize_from_iterable, @@ -322,7 +324,7 @@ def __init__( # consolidate data & figure out what our result ndim is going to be ndims = set() for obj in objs: - if not isinstance(obj, (Series, DataFrame)): + if not isinstance(obj, (ABCSeries, DataFrame)): msg = ( "cannot concatenate object of type '{}';" " only Series and DataFrame objs are valid".format(type(obj)) @@ -348,7 +350,7 @@ def __init__( # filter out the empties if we have not multi-index possibilities # note to keep empty Series as it affect to result columns / name non_empties = [ - obj for obj in objs if sum(obj.shape) > 0 or isinstance(obj, Series) + obj for obj in objs if sum(obj.shape) > 0 or isinstance(obj, ABCSeries) ] if len(non_empties) and ( @@ -362,7 +364,7 @@ def __init__( self.objs = objs # Standardize axis parameter to int - if isinstance(sample, Series): + if isinstance(sample, ABCSeries): axis = DataFrame._get_axis_number(axis) else: axis = sample._get_axis_number(axis) @@ -372,7 +374,7 @@ def __init__( if self._is_frame: axis = 1 if axis == 0 else 0 - self._is_series = isinstance(sample, Series) + self._is_series = isinstance(sample, ABCSeries) if not 0 <= axis <= sample.ndim: raise AssertionError( "axis must be between 0 and {ndim}, input was" @@ -545,7 +547,7 @@ def _get_concat_axis(self): num = 0 has_names = False for i, x in enumerate(self.objs): - if not isinstance(x, Series): + if not isinstance(x, ABCSeries): raise TypeError( "Cannot concatenate type 'Series' " "with object of type {type!r}".format(type=type(x).__name__)