@@ -200,7 +200,14 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
200200 elif isinstance (data , dict ):
201201 if data :
202202 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
204211 a_values = np .empty (len (values ), dtype = 'object' )
205212 # Avoid interpreting list-like elements as 2nd dimension:
206213 for idx , v in enumerate (values ):
@@ -219,7 +226,14 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
219226 order = np .arange (len (keys ))
220227 index = keys [order ]
221228 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 )
223237 order = - np .ones (len (index ), dtype = int )
224238 order [locs ] = np .arange (len (keys ))
225239 data = values [order ]
@@ -228,6 +242,9 @@ def __init__(self, data=None, index=None, dtype=None, name=None,
228242 if is_integer_dtype (data ):
229243 data = data .astype (float )
230244 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 )
231248 if any ([is_list_like (item ) for item in data ]):
232249 data = list (data )
233250 else :
0 commit comments