@@ -129,6 +129,15 @@ def _is_nested_tuple(possible_tuple):
129
129
)
130
130
131
131
132
+ def normalize_label (value , extract_scalar = False ):
133
+ if getattr (value , "ndim" , 1 ) <= 1 :
134
+ value = _asarray_tuplesafe (value )
135
+ if extract_scalar :
136
+ # see https://github.com/pydata/xarray/pull/4292 for details
137
+ value = value [()] if value .dtype .kind in "mM" else value .item ()
138
+ return value
139
+
140
+
132
141
def get_indexer_nd (index , labels , method = None , tolerance = None ):
133
142
"""Wrapper around :meth:`pandas.Index.get_indexer` supporting n-dimensional
134
143
labels
@@ -207,14 +216,9 @@ def query(self, labels, method=None, tolerance=None):
207
216
"a dimension that does not have a MultiIndex"
208
217
)
209
218
else :
210
- label = (
211
- label
212
- if getattr (label , "ndim" , 1 ) > 1 # vectorized-indexing
213
- else _asarray_tuplesafe (label )
214
- )
219
+ label = normalize_label (label )
215
220
if label .ndim == 0 :
216
- # see https://github.com/pydata/xarray/pull/4292 for details
217
- label_value = label [()] if label .dtype .kind in "mM" else label .item ()
221
+ label_value = normalize_label (label , extract_scalar = True )
218
222
if isinstance (self .index , pd .CategoricalIndex ):
219
223
if method is not None :
220
224
raise ValueError (
@@ -336,6 +340,10 @@ def query(self, labels, method=None, tolerance=None):
336
340
# label(s) given for multi-index level(s)
337
341
if all ([lbl in self .index .names for lbl in labels ]):
338
342
is_nested_vals = _is_nested_tuple (tuple (labels .values ()))
343
+ labels = {
344
+ k : normalize_label (v , extract_scalar = True ) for k , v in labels .items ()
345
+ }
346
+
339
347
if len (labels ) == self .index .nlevels and not is_nested_vals :
340
348
indexer = self .index .get_loc (tuple (labels [k ] for k in self .index .names ))
341
349
else :
0 commit comments