Skip to content

Commit 1a8305a

Browse files
author
Benoit Bovy
committed
set better default names for multi-index levels
1 parent 094d085 commit 1a8305a

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

xarray/core/indexing.py

+12-2
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def convert_label_indexer(index, label, index_name='', method=None,
187187

188188
elif is_dict_like(label):
189189
if not isinstance(index, pd.MultiIndex):
190-
raise ValueError('cannot use a dict-like object for selection on a'
190+
raise ValueError('cannot use a dict-like object for selection on a '
191191
'dimension that does not have a MultiIndex')
192192
indexer, new_index = index.get_loc_level(tuple(label.values()),
193193
level=tuple(label.keys()))
@@ -219,7 +219,17 @@ def remap_label_indexers(data_obj, indexers, method=None, tolerance=None):
219219

220220
pos_indexers, new_indexes = {}, {}
221221
for dim, label in iteritems(indexers):
222-
idxr, new_idx = convert_label_indexer(data_obj[dim].to_index(), label,
222+
index = data_obj[dim].to_index()
223+
224+
if isinstance(index, pd.MultiIndex):
225+
# set default names for multi-index unnamed levels so that
226+
# we can safely rename dimension / coordinate later
227+
valid_level_names = [name or '{}_level_{}'.format(dim, i)
228+
for i, name in enumerate(index.names)]
229+
index = index.copy()
230+
index.names = valid_level_names
231+
232+
idxr, new_idx = convert_label_indexer(index, label,
223233
dim, method, tolerance)
224234
pos_indexers[dim] = idxr
225235
if new_idx is not None and not isinstance(new_idx, pd.MultiIndex):

0 commit comments

Comments
 (0)