@@ -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
a_values = np .empty (len (values ), dtype = 'object' )
205
212
# Avoid interpreting list-like elements as 2nd dimension:
206
213
for idx , v in enumerate (values ):
@@ -219,7 +226,14 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
219
226
order = np .arange (len (keys ))
220
227
index = keys [order ]
221
228
else :
222
- locs = index .get_indexer (keys )
229
+ # Workaround for #18485 - part 2/3
230
+ remap_to_mi = False
231
+
232
+ def _flatten (idx ):
233
+ if isinstance (idx , MultiIndex ):
234
+ return Index (list (idx ), tupleize_cols = False )
235
+ return idx
236
+ locs = _flatten (index ).get_indexer (keys )
223
237
order = - np .ones (len (index ), dtype = int )
224
238
order [locs ] = np .arange (len (keys ))
225
239
data = values [order ]
@@ -228,6 +242,9 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
228
242
if is_integer_dtype (data ):
229
243
data = data .astype (float )
230
244
data [nan_idxs ] = np .nan
245
+ # Workaround for #18485 - part 3/3
246
+ if remap_to_mi :
247
+ index = Index (list (index ), tupleize_cols = True )
231
248
if any ([is_list_like (item ) for item in data ]):
232
249
data = list (data )
233
250
else :
0 commit comments