构造多索引数据帧嵌套Python字典

构造多索引数据帧嵌套Python字典,python,pandas,dataframe,Python,Pandas,Dataframe,我想从这种形式的深层嵌套字典构造一个多索引数据框架 md = {'50': {'100': {'col1': ('0.100', '0.200', '0.300', '0.400'), 'col2': ('6.263E-03',

我想从这种形式的深层嵌套字典构造一个多索引数据框架

md = {'50': {'100': {'col1': ('0.100',
                              '0.200',
                              '0.300',
                              '0.400'),
                     'col2': ('6.263E-03',
                              '6.746E-03',
                              '7.266E-03',
                              '7.825E-03')},
             '101': {'col1': ('0.100',
                              '0.200',
                              '0.300',
                              '0.400'),
                     'col2': ('6.510E-03',
                              '7.011E-03',
                              '7.553E-03',
                              '8.134E-03')}
             '102': ...
            }
      '51': ...
     }
我试过了

df = pd.DataFrame.from_dict({(i,j): md[i][j][v] for i in md.keys() for j in md[i].keys() for v in md[i][j]}, orient='index')
下面,但是我得到了一个包含1行和许多列的数据帧

奖金: 我还想标记多索引键和列“col1”和“col2”,并将字符串分别转换为
int
float


如何从数据帧重建原始词典? 我尝试了
df.\u dict('list')

查看以下答案:。该方法解压字典的键和值,并将数据转换为多索引数据帧的易于处理的格式。请注意,如果您使用的是python 3.5+,则需要使用
.items()
而不是
.iteritems()
,如链接的答案所示:

>>>>import pandas as pd
>>>>reform = {(firstKey, secondKey, thirdKey): values for firstKey, middleDict in md.items() for secondKey, innerdict in middleDict.items() for thirdKey, values in innerdict.items()}
>>>>df = pd.DataFrame(reform)
要将col1和col的数据类型更改为
int
float
,然后可以使用并指定所需的任何值:

df.rename({'col1':1, 'col2':2.5}, axis=1, level=2, inplace=True)
此外,如果您希望在索引上显示级别而不是列,也可以使用

如果要从该多索引重建词典,可以执行以下操作:

>>>>md2={}
>>>>for i in df.columns:
        if i[0] not in md2.keys():
            md2[i[0]]={}
        if i[1] not in md2[i[0]].keys():
            md2[i[0]][i[1]]={}
    md2[i[0]][i[1]][i[2]]=tuple(df[i[0]][i[1]][i[2]].values)

如何从数据帧重建原始词典?@redhotsnow我在答案中添加了一种重建技术。