@@ -200,7 +200,14 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
200
200
elif isinstance (data , dict ):
201
201
if data :
202
202
keys , values = zip (* compat .iteritems (data ))
203
- keys = Index (list (keys ), tupleize_cols = True )
203
+ # Workaround for #18485 - part 1/3
204
+ maybe_mi_keys = Index (list (keys ), tupleize_cols = True )
205
+ if isinstance (maybe_mi_keys , MultiIndex ):
206
+ remap_to_mi = True
207
+ keys = Index (list (keys ), tupleize_cols = False )
208
+ else :
209
+ remap_to_mi = False
210
+ keys = maybe_mi_keys
204
211
values = np .asarray (values , dtype = 'object' )
205
212
try :
206
213
values = lib .maybe_convert_objects (values )
@@ -216,7 +223,14 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
216
223
order = np .arange (len (keys ))
217
224
index = keys [order ]
218
225
else :
219
- locs = index .get_indexer (keys )
226
+ # Workaround for #18485 - part 2/3
227
+ remap_to_mi = False
228
+
229
+ def _flatten (idx ):
230
+ if isinstance (idx , MultiIndex ):
231
+ return Index (list (idx ), tupleize_cols = False )
232
+ return idx
233
+ locs = _flatten (index ).get_indexer (keys )
220
234
order = - np .ones (len (index ), dtype = int )
221
235
order [locs ] = np .arange (len (keys ))
222
236
data = values [order ]
@@ -225,6 +239,9 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
225
239
if is_integer_dtype (data ):
226
240
data = data .astype (float )
227
241
data [nan_idxs ] = np .nan
242
+ # Workaround for #18485 - part 3/3
243
+ if remap_to_mi :
244
+ index = Index (list (index ), tupleize_cols = True )
228
245
else :
229
246
if index is None :
230
247
index = Index ([])
0 commit comments