从嵌套字典构造熊猫多索引数据框

Posted

技术标签:

【中文标题】从嵌套字典构造熊猫多索引数据框【英文标题】:construct pandas multi index dataframe from nested dictionary 【发布时间】:2021-06-21 18:49:44 【问题描述】:

我想在这里从嵌套字典构建熊猫数据框:

res = 'loss': 'first_neuron': 10: 0.6430850658151839,
                                 12: 0.6419735709090292,
                                 14: 0.628668905776224,
                'lr': 0.001: 0.7243950462635652,
                       0.01: 0.6431898441579607,
                       0.1: 0.5461426520789111,
       'accuracy': 'first_neuron': 10: 0.6125457246362427,
                                     12: 0.6154635353588763,
                                     14: 0.6285751049901233,
                    'lr': 0.001: 0.5127914948963824,
                           0.01: 0.6298153875050722,
                           0.1: 0.7139774825837877

到这里:

在尝试了here 和here 的类似问题后,我无法正确回答

【问题讨论】:

【参考方案1】:

您的 dict 包含许多嵌套级别,它们不适合 pandas。您可以先将 dict 解析为更简单的 dict,然后稍微操作数据框:

from collections import defaultdict
tmp = defaultdict(list)

for key1, value1 in res.items():
    for key2, value2 in value1.items():
        for key3, value3 in value2.items():
            tmp['metric'].append(key1)
            tmp['index1'].append(key2)
            tmp['index2'].append(key3)
            tmp['value'].append(value3)
           
df = (
    pd.DataFrame(tmp)
        .pivot(index=['index1', 'index2'], columns='metric')
        .droplevel(0, axis=1)
        .rename_axis(columns=None)
)

结果:

                     accuracy      loss
index1       index2                    
first_neuron 10.000  0.612546  0.643085
             12.000  0.615464  0.641974
             14.000  0.628575  0.628669
lr           0.001   0.512791  0.724395
             0.010   0.629815  0.643190
             0.100   0.713977  0.546143

【讨论】:

以上是关于从嵌套字典构造熊猫多索引数据框的主要内容,如果未能解决你的问题,请参考以下文章

具有可迭代对象的字典字典到具有多索引的可迭代对象索引的熊猫数据框

如何从嵌套字典创建多索引数据框?

多索引熊猫数据框到字典

如何将多索引列转换为熊猫数据框的单索引列?

熊猫数据框检查索引是不是存在于多索引中

如何重新索引多索引熊猫数据框?