47
47
Axis ,
48
48
Dtype ,
49
49
FilePathOrBuffer ,
50
+ FrameOrSeriesUnion ,
50
51
IndexKeyFunc ,
51
52
Label ,
52
53
Level ,
106
107
needs_i8_conversion ,
107
108
pandas_dtype ,
108
109
)
109
- from pandas .core .dtypes .generic import (
110
- ABCDataFrame ,
111
- ABCIndexClass ,
112
- ABCMultiIndex ,
113
- ABCSeries ,
114
- )
115
110
from pandas .core .dtypes .missing import isna , notna
116
111
117
112
from pandas .core import algorithms , common as com , nanops , ops
@@ -1838,7 +1833,7 @@ def to_records(
1838
1833
dtype=[('I', 'S1'), ('A', '<i8'), ('B', '<f8')])
1839
1834
"""
1840
1835
if index :
1841
- if isinstance (self .index , ABCMultiIndex ):
1836
+ if isinstance (self .index , MultiIndex ):
1842
1837
# array of tuples to numpy cols. copy copy copy
1843
1838
ix_vals = list (map (np .array , zip (* self .index .values )))
1844
1839
else :
@@ -1851,7 +1846,7 @@ def to_records(
1851
1846
count = 0
1852
1847
index_names = list (self .index .names )
1853
1848
1854
- if isinstance (self .index , ABCMultiIndex ):
1849
+ if isinstance (self .index , MultiIndex ):
1855
1850
for i , n in enumerate (index_names ):
1856
1851
if n is None :
1857
1852
index_names [i ] = f"level_{ count } "
@@ -2782,7 +2777,7 @@ def __getitem__(self, key):
2782
2777
# The behavior is inconsistent. It returns a Series, except when
2783
2778
# - the key itself is repeated (test on data.shape, #9519), or
2784
2779
# - we have a MultiIndex on columns (test on self.columns, #21309)
2785
- if data .shape [1 ] == 1 and not isinstance (self .columns , ABCMultiIndex ):
2780
+ if data .shape [1 ] == 1 and not isinstance (self .columns , MultiIndex ):
2786
2781
data = data [key ]
2787
2782
2788
2783
return data
@@ -3600,7 +3595,7 @@ def reindexer(value):
3600
3595
elif isinstance (value , DataFrame ):
3601
3596
# align right-hand-side columns if self.columns
3602
3597
# is multi-index and self[key] is a sub-frame
3603
- if isinstance (self .columns , ABCMultiIndex ) and key in self .columns :
3598
+ if isinstance (self .columns , MultiIndex ) and key in self .columns :
3604
3599
loc = self .columns .get_loc (key )
3605
3600
if isinstance (loc , (slice , Series , np .ndarray , Index )):
3606
3601
cols = maybe_droplevels (self .columns [loc ], key )
@@ -3649,7 +3644,7 @@ def reindexer(value):
3649
3644
3650
3645
# broadcast across multiple columns if necessary
3651
3646
if broadcast and key in self .columns and value .ndim == 1 :
3652
- if not self .columns .is_unique or isinstance (self .columns , ABCMultiIndex ):
3647
+ if not self .columns .is_unique or isinstance (self .columns , MultiIndex ):
3653
3648
existing_piece = self [key ]
3654
3649
if isinstance (existing_piece , DataFrame ):
3655
3650
value = np .tile (value , (len (existing_piece .columns ), 1 ))
@@ -4337,9 +4332,7 @@ def set_index(
4337
4332
4338
4333
missing : List [Label ] = []
4339
4334
for col in keys :
4340
- if isinstance (
4341
- col , (ABCIndexClass , ABCSeries , np .ndarray , list , abc .Iterator )
4342
- ):
4335
+ if isinstance (col , (Index , Series , np .ndarray , list , abc .Iterator )):
4343
4336
# arrays are fine as long as they are one-dimensional
4344
4337
# iterators get converted to list below
4345
4338
if getattr (col , "ndim" , 1 ) != 1 :
@@ -4368,19 +4361,19 @@ def set_index(
4368
4361
names = []
4369
4362
if append :
4370
4363
names = list (self .index .names )
4371
- if isinstance (self .index , ABCMultiIndex ):
4364
+ if isinstance (self .index , MultiIndex ):
4372
4365
for i in range (self .index .nlevels ):
4373
4366
arrays .append (self .index ._get_level_values (i ))
4374
4367
else :
4375
4368
arrays .append (self .index )
4376
4369
4377
4370
to_remove : List [Label ] = []
4378
4371
for col in keys :
4379
- if isinstance (col , ABCMultiIndex ):
4372
+ if isinstance (col , MultiIndex ):
4380
4373
for n in range (col .nlevels ):
4381
4374
arrays .append (col ._get_level_values (n ))
4382
4375
names .extend (col .names )
4383
- elif isinstance (col , (ABCIndexClass , ABCSeries )):
4376
+ elif isinstance (col , (Index , Series )):
4384
4377
# if Index then not MultiIndex (treated above)
4385
4378
arrays .append (col )
4386
4379
names .append (col .name )
@@ -4625,7 +4618,7 @@ def _maybe_casted_values(index, labels=None):
4625
4618
4626
4619
if not drop :
4627
4620
to_insert : Iterable [Tuple [Any , Optional [Any ]]]
4628
- if isinstance (self .index , ABCMultiIndex ):
4621
+ if isinstance (self .index , MultiIndex ):
4629
4622
names = [
4630
4623
(n if n is not None else f"level_{ i } " )
4631
4624
for i , n in enumerate (self .index .names )
@@ -4636,7 +4629,7 @@ def _maybe_casted_values(index, labels=None):
4636
4629
names = [default ] if self .index .name is None else [self .index .name ]
4637
4630
to_insert = ((self .index , None ),)
4638
4631
4639
- multi_col = isinstance (self .columns , ABCMultiIndex )
4632
+ multi_col = isinstance (self .columns , MultiIndex )
4640
4633
for i , (lev , lab ) in reversed (list (enumerate (to_insert ))):
4641
4634
if not (level is None or i in level ):
4642
4635
continue
@@ -5240,7 +5233,7 @@ def sort_index(
5240
5233
level , ascending = ascending , sort_remaining = sort_remaining
5241
5234
)
5242
5235
5243
- elif isinstance (labels , ABCMultiIndex ):
5236
+ elif isinstance (labels , MultiIndex ):
5244
5237
from pandas .core .sorting import lexsort_indexer
5245
5238
5246
5239
indexer = lexsort_indexer (
@@ -5607,14 +5600,14 @@ def swaplevel(self, i=-2, j=-1, axis=0) -> "DataFrame":
5607
5600
5608
5601
axis = self ._get_axis_number (axis )
5609
5602
5610
- if not isinstance (result ._get_axis (axis ), ABCMultiIndex ): # pragma: no cover
5603
+ if not isinstance (result ._get_axis (axis ), MultiIndex ): # pragma: no cover
5611
5604
raise TypeError ("Can only swap levels on a hierarchical axis." )
5612
5605
5613
5606
if axis == 0 :
5614
- assert isinstance (result .index , ABCMultiIndex )
5607
+ assert isinstance (result .index , MultiIndex )
5615
5608
result .index = result .index .swaplevel (i , j )
5616
5609
else :
5617
- assert isinstance (result .columns , ABCMultiIndex )
5610
+ assert isinstance (result .columns , MultiIndex )
5618
5611
result .columns = result .columns .swaplevel (i , j )
5619
5612
return result
5620
5613
@@ -5635,16 +5628,16 @@ def reorder_levels(self, order, axis=0) -> "DataFrame":
5635
5628
DataFrame
5636
5629
"""
5637
5630
axis = self ._get_axis_number (axis )
5638
- if not isinstance (self ._get_axis (axis ), ABCMultiIndex ): # pragma: no cover
5631
+ if not isinstance (self ._get_axis (axis ), MultiIndex ): # pragma: no cover
5639
5632
raise TypeError ("Can only reorder levels on a hierarchical axis." )
5640
5633
5641
5634
result = self .copy ()
5642
5635
5643
5636
if axis == 0 :
5644
- assert isinstance (result .index , ABCMultiIndex )
5637
+ assert isinstance (result .index , MultiIndex )
5645
5638
result .index = result .index .reorder_levels (order )
5646
5639
else :
5647
- assert isinstance (result .columns , ABCMultiIndex )
5640
+ assert isinstance (result .columns , MultiIndex )
5648
5641
result .columns = result .columns .reorder_levels (order )
5649
5642
return result
5650
5643
@@ -5913,7 +5906,8 @@ def extract_values(arr):
5913
5906
# Does two things:
5914
5907
# 1. maybe gets the values from the Series / Index
5915
5908
# 2. convert datelike to i8
5916
- if isinstance (arr , (ABCIndexClass , ABCSeries )):
5909
+ # TODO: extract_array?
5910
+ if isinstance (arr , (Index , Series )):
5917
5911
arr = arr ._values
5918
5912
5919
5913
if needs_i8_conversion (arr .dtype ):
@@ -5925,7 +5919,8 @@ def extract_values(arr):
5925
5919
5926
5920
def combiner (x , y ):
5927
5921
mask = isna (x )
5928
- if isinstance (mask , (ABCIndexClass , ABCSeries )):
5922
+ # TODO: extract_array?
5923
+ if isinstance (mask , (Index , Series )):
5929
5924
mask = mask ._values
5930
5925
5931
5926
x_values = extract_values (x )
@@ -7020,8 +7015,8 @@ def _gotitem(
7020
7015
self ,
7021
7016
key : Union [str , List [str ]],
7022
7017
ndim : int ,
7023
- subset : Optional [Union [ Series , ABCDataFrame ] ] = None ,
7024
- ) -> Union [ Series , ABCDataFrame ] :
7018
+ subset : Optional [FrameOrSeriesUnion ] = None ,
7019
+ ) -> FrameOrSeriesUnion :
7025
7020
"""
7026
7021
Sub-classes to define. Return a sliced object.
7027
7022
@@ -8225,7 +8220,7 @@ def _count_level(self, level, axis=0, numeric_only=False):
8225
8220
count_axis = frame ._get_axis (axis )
8226
8221
agg_axis = frame ._get_agg_axis (axis )
8227
8222
8228
- if not isinstance (count_axis , ABCMultiIndex ):
8223
+ if not isinstance (count_axis , MultiIndex ):
8229
8224
raise TypeError (
8230
8225
f"Can only count levels on hierarchical { self ._get_axis_name (axis )} ."
8231
8226
)
0 commit comments