Skip to content

Commit b477e4a

Browse files
jbrockmendelSeeminSyed
authored andcommitted
CLN: avoid _ndarray_values, values in MultiIndex (pandas-dev#32452)
1 parent 2f0a094 commit b477e4a

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

pandas/core/indexes/multi.py

+26-20
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from pandas._libs import algos as libalgos, index as libindex, lib
2020
from pandas._libs.hashtable import duplicated_int64
21-
from pandas._typing import AnyArrayLike, ArrayLike, Scalar
21+
from pandas._typing import AnyArrayLike, Scalar
2222
from pandas.compat.numpy import function as nv
2323
from pandas.errors import PerformanceWarning, UnsortedIndexError
2424
from pandas.util._decorators import Appender, cache_readonly
@@ -52,6 +52,7 @@
5252
ensure_index,
5353
)
5454
from pandas.core.indexes.frozen import FrozenList
55+
from pandas.core.indexes.numeric import Int64Index
5556
import pandas.core.missing as missing
5657
from pandas.core.sorting import (
5758
get_group_index,
@@ -1180,7 +1181,7 @@ def _format_native_types(self, na_rep="nan", **kwargs):
11801181
sortorder=self.sortorder,
11811182
verify_integrity=False,
11821183
)
1183-
return mi.values
1184+
return mi._values
11841185

11851186
def format(
11861187
self,
@@ -1419,7 +1420,7 @@ def is_monotonic_increasing(self) -> bool:
14191420
except TypeError:
14201421

14211422
# we have mixed types and np.lexsort is not happy
1422-
return Index(self.values).is_monotonic
1423+
return Index(self._values).is_monotonic
14231424

14241425
@cache_readonly
14251426
def is_monotonic_decreasing(self) -> bool:
@@ -1612,7 +1613,7 @@ def to_flat_index(self):
16121613
('bar', 'baz'), ('bar', 'qux')],
16131614
dtype='object')
16141615
"""
1615-
return Index(self.values, tupleize_cols=False)
1616+
return Index(self._values, tupleize_cols=False)
16161617

16171618
@property
16181619
def is_all_dates(self) -> bool:
@@ -1914,7 +1915,7 @@ def append(self, other):
19141915
arrays.append(label.append(appended))
19151916
return MultiIndex.from_arrays(arrays, names=self.names)
19161917

1917-
to_concat = (self.values,) + tuple(k._values for k in other)
1918+
to_concat = (self._values,) + tuple(k._values for k in other)
19181919
new_tuples = np.concatenate(to_concat)
19191920

19201921
# if all(isinstance(x, MultiIndex) for x in other):
@@ -1924,7 +1925,7 @@ def append(self, other):
19241925
return Index(new_tuples)
19251926

19261927
def argsort(self, *args, **kwargs) -> np.ndarray:
1927-
return self.values.argsort(*args, **kwargs)
1928+
return self._values.argsort(*args, **kwargs)
19281929

19291930
@Appender(_index_shared_docs["repeat"] % _index_doc_kwargs)
19301931
def repeat(self, repeats, axis=None):
@@ -2368,7 +2369,7 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
23682369

23692370
# let's instead try with a straight Index
23702371
if method is None:
2371-
return Index(self.values).get_indexer(
2372+
return Index(self._values).get_indexer(
23722373
target, method=method, limit=limit, tolerance=tolerance
23732374
)
23742375

@@ -2831,7 +2832,8 @@ def convert_indexer(start, stop, step, indexer=indexer, codes=level_codes):
28312832
mapper = Series(indexer)
28322833
indexer = codes.take(ensure_platform_int(indexer))
28332834
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)
28352837

28362838
else:
28372839
m = np.zeros(len(codes), dtype=bool)
@@ -2949,7 +2951,7 @@ def get_locs(self, seq):
29492951
n = len(self)
29502952
indexer = None
29512953

2952-
def _convert_to_indexer(r):
2954+
def _convert_to_indexer(r) -> Int64Index:
29532955
# return an indexer
29542956
if isinstance(r, slice):
29552957
m = np.zeros(n, dtype=bool)
@@ -3026,13 +3028,16 @@ def _update_indexer(idxr, indexer=indexer):
30263028
if indexer is None:
30273029
return np.array([], dtype=np.int64)
30283030

3031+
assert isinstance(indexer, Int64Index), type(indexer)
30293032
indexer = self._reorder_indexer(seq, indexer)
30303033

3031-
return indexer._ndarray_values
3034+
return indexer._values
30323035

30333036
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:
30363041
"""
30373042
Reorder an indexer of a MultiIndex (self) so that the label are in the
30383043
same order as given in seq
@@ -3139,8 +3144,8 @@ def equals(self, other) -> bool:
31393144
if self.nlevels != other.nlevels:
31403145
return False
31413146

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)
31443149

31453150
if self.nlevels != other.nlevels:
31463151
return False
@@ -3232,7 +3237,7 @@ def union(self, other, sort=None):
32323237
# TODO: Index.union returns other when `len(self)` is 0.
32333238

32343239
uniq_tuples = lib.fast_unique_multiple(
3235-
[self._ndarray_values, other._ndarray_values], sort=sort
3240+
[self._values, other._ndarray_values], sort=sort
32363241
)
32373242

32383243
return MultiIndex.from_arrays(
@@ -3267,7 +3272,7 @@ def intersection(self, other, sort=False):
32673272
if self.equals(other):
32683273
return self
32693274

3270-
lvals = self._ndarray_values
3275+
lvals = self._values
32713276
rvals = other._ndarray_values
32723277

32733278
uniq_tuples = None # flag whether _inner_indexer was succesful
@@ -3342,7 +3347,7 @@ def difference(self, other, sort=None):
33423347
indexer = indexer.take((indexer != -1).nonzero()[0])
33433348

33443349
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)
33463351
if sort is None:
33473352
difference = sorted(difference)
33483353

@@ -3359,7 +3364,8 @@ def difference(self, other, sort=None):
33593364
def _convert_can_do_setop(self, other):
33603365
result_names = self.names
33613366

3362-
if not hasattr(other, "names"):
3367+
if not isinstance(other, Index):
3368+
33633369
if len(other) == 0:
33643370
other = MultiIndex(
33653371
levels=[[]] * self.nlevels,
@@ -3456,8 +3462,8 @@ def _wrap_joined_index(self, joined, other):
34563462
@Appender(Index.isin.__doc__)
34573463
def isin(self, values, level=None):
34583464
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)
34613467
else:
34623468
num = self._get_level_number(level)
34633469
levs = self.get_level_values(num)

0 commit comments

Comments
 (0)