18
18
19
19
from pandas ._libs import algos as libalgos , index as libindex , lib
20
20
from pandas ._libs .hashtable import duplicated_int64
21
- from pandas ._typing import AnyArrayLike , ArrayLike , Scalar
21
+ from pandas ._typing import AnyArrayLike , Scalar
22
22
from pandas .compat .numpy import function as nv
23
23
from pandas .errors import PerformanceWarning , UnsortedIndexError
24
24
from pandas .util ._decorators import Appender , cache_readonly
52
52
ensure_index ,
53
53
)
54
54
from pandas .core .indexes .frozen import FrozenList
55
+ from pandas .core .indexes .numeric import Int64Index
55
56
import pandas .core .missing as missing
56
57
from pandas .core .sorting import (
57
58
get_group_index ,
@@ -1180,7 +1181,7 @@ def _format_native_types(self, na_rep="nan", **kwargs):
1180
1181
sortorder = self .sortorder ,
1181
1182
verify_integrity = False ,
1182
1183
)
1183
- return mi .values
1184
+ return mi ._values
1184
1185
1185
1186
def format (
1186
1187
self ,
@@ -1419,7 +1420,7 @@ def is_monotonic_increasing(self) -> bool:
1419
1420
except TypeError :
1420
1421
1421
1422
# we have mixed types and np.lexsort is not happy
1422
- return Index (self .values ).is_monotonic
1423
+ return Index (self ._values ).is_monotonic
1423
1424
1424
1425
@cache_readonly
1425
1426
def is_monotonic_decreasing (self ) -> bool :
@@ -1612,7 +1613,7 @@ def to_flat_index(self):
1612
1613
('bar', 'baz'), ('bar', 'qux')],
1613
1614
dtype='object')
1614
1615
"""
1615
- return Index (self .values , tupleize_cols = False )
1616
+ return Index (self ._values , tupleize_cols = False )
1616
1617
1617
1618
@property
1618
1619
def is_all_dates (self ) -> bool :
@@ -1914,7 +1915,7 @@ def append(self, other):
1914
1915
arrays .append (label .append (appended ))
1915
1916
return MultiIndex .from_arrays (arrays , names = self .names )
1916
1917
1917
- to_concat = (self .values ,) + tuple (k ._values for k in other )
1918
+ to_concat = (self ._values ,) + tuple (k ._values for k in other )
1918
1919
new_tuples = np .concatenate (to_concat )
1919
1920
1920
1921
# if all(isinstance(x, MultiIndex) for x in other):
@@ -1924,7 +1925,7 @@ def append(self, other):
1924
1925
return Index (new_tuples )
1925
1926
1926
1927
def argsort (self , * args , ** kwargs ) -> np .ndarray :
1927
- return self .values .argsort (* args , ** kwargs )
1928
+ return self ._values .argsort (* args , ** kwargs )
1928
1929
1929
1930
@Appender (_index_shared_docs ["repeat" ] % _index_doc_kwargs )
1930
1931
def repeat (self , repeats , axis = None ):
@@ -2368,7 +2369,7 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
2368
2369
2369
2370
# let's instead try with a straight Index
2370
2371
if method is None :
2371
- return Index (self .values ).get_indexer (
2372
+ return Index (self ._values ).get_indexer (
2372
2373
target , method = method , limit = limit , tolerance = tolerance
2373
2374
)
2374
2375
@@ -2831,7 +2832,8 @@ def convert_indexer(start, stop, step, indexer=indexer, codes=level_codes):
2831
2832
mapper = Series (indexer )
2832
2833
indexer = codes .take (ensure_platform_int (indexer ))
2833
2834
result = Series (Index (indexer ).isin (r ).nonzero ()[0 ])
2834
- m = result .map (mapper )._ndarray_values
2835
+ m = result .map (mapper )
2836
+ m = np .asarray (m )
2835
2837
2836
2838
else :
2837
2839
m = np .zeros (len (codes ), dtype = bool )
@@ -2949,7 +2951,7 @@ def get_locs(self, seq):
2949
2951
n = len (self )
2950
2952
indexer = None
2951
2953
2952
- def _convert_to_indexer (r ):
2954
+ def _convert_to_indexer (r ) -> Int64Index :
2953
2955
# return an indexer
2954
2956
if isinstance (r , slice ):
2955
2957
m = np .zeros (n , dtype = bool )
@@ -3026,13 +3028,16 @@ def _update_indexer(idxr, indexer=indexer):
3026
3028
if indexer is None :
3027
3029
return np .array ([], dtype = np .int64 )
3028
3030
3031
+ assert isinstance (indexer , Int64Index ), type (indexer )
3029
3032
indexer = self ._reorder_indexer (seq , indexer )
3030
3033
3031
- return indexer ._ndarray_values
3034
+ return indexer ._values
3032
3035
3033
3036
def _reorder_indexer (
3034
- self , seq : Tuple [Union [Scalar , Iterable , AnyArrayLike ], ...], indexer : ArrayLike
3035
- ) -> ArrayLike :
3037
+ self ,
3038
+ seq : Tuple [Union [Scalar , Iterable , AnyArrayLike ], ...],
3039
+ indexer : Int64Index ,
3040
+ ) -> Int64Index :
3036
3041
"""
3037
3042
Reorder an indexer of a MultiIndex (self) so that the label are in the
3038
3043
same order as given in seq
@@ -3139,8 +3144,8 @@ def equals(self, other) -> bool:
3139
3144
if self .nlevels != other .nlevels :
3140
3145
return False
3141
3146
3142
- other_vals = com .values_from_object (ensure_index ( other ) )
3143
- return array_equivalent (self ._ndarray_values , other_vals )
3147
+ other_vals = com .values_from_object (other )
3148
+ return array_equivalent (self ._values , other_vals )
3144
3149
3145
3150
if self .nlevels != other .nlevels :
3146
3151
return False
@@ -3232,7 +3237,7 @@ def union(self, other, sort=None):
3232
3237
# TODO: Index.union returns other when `len(self)` is 0.
3233
3238
3234
3239
uniq_tuples = lib .fast_unique_multiple (
3235
- [self ._ndarray_values , other ._ndarray_values ], sort = sort
3240
+ [self ._values , other ._ndarray_values ], sort = sort
3236
3241
)
3237
3242
3238
3243
return MultiIndex .from_arrays (
@@ -3267,7 +3272,7 @@ def intersection(self, other, sort=False):
3267
3272
if self .equals (other ):
3268
3273
return self
3269
3274
3270
- lvals = self ._ndarray_values
3275
+ lvals = self ._values
3271
3276
rvals = other ._ndarray_values
3272
3277
3273
3278
uniq_tuples = None # flag whether _inner_indexer was succesful
@@ -3342,7 +3347,7 @@ def difference(self, other, sort=None):
3342
3347
indexer = indexer .take ((indexer != - 1 ).nonzero ()[0 ])
3343
3348
3344
3349
label_diff = np .setdiff1d (np .arange (this .size ), indexer , assume_unique = True )
3345
- difference = this .values .take (label_diff )
3350
+ difference = this ._values .take (label_diff )
3346
3351
if sort is None :
3347
3352
difference = sorted (difference )
3348
3353
@@ -3359,7 +3364,8 @@ def difference(self, other, sort=None):
3359
3364
def _convert_can_do_setop (self , other ):
3360
3365
result_names = self .names
3361
3366
3362
- if not hasattr (other , "names" ):
3367
+ if not isinstance (other , Index ):
3368
+
3363
3369
if len (other ) == 0 :
3364
3370
other = MultiIndex (
3365
3371
levels = [[]] * self .nlevels ,
@@ -3456,8 +3462,8 @@ def _wrap_joined_index(self, joined, other):
3456
3462
@Appender (Index .isin .__doc__ )
3457
3463
def isin (self , values , level = None ):
3458
3464
if level is None :
3459
- values = MultiIndex .from_tuples (values , names = self .names ).values
3460
- return algos .isin (self .values , values )
3465
+ values = MultiIndex .from_tuples (values , names = self .names )._values
3466
+ return algos .isin (self ._values , values )
3461
3467
else :
3462
3468
num = self ._get_level_number (level )
3463
3469
levs = self .get_level_values (num )
0 commit comments