可以使用嵌套字典创建嵌套列的pandas数据框吗?

0 投票
1 回答
73 浏览
提问于 2025-04-14 15:27

我在这里想尝试一些新想法,可能我的想法并不好。欢迎大家提出更好的建议。我想创建一个嵌套的列式 pandas 数据框,目的是为了可视化和分析。输出结果应该像这样 -

           Marks
  Physics   |      Biology
 Theo|Prac  |     Theo|Prac
  99 | 100  |      89 | 100 

我的数据是以嵌套字典的形式存储的 -

nested_dict = {
    'Marks': {
        'Physics': {
            'Theo': 99,
            'Prac': 100
        },
        'Biology': {
            'Theo': 89,
            'Prac': 100
        }
    }
}

我觉得上面的表格在可视化方面看起来不错,但我不确定它是否方便分析。为了分析,我需要对子组进行操作,比如:物理成绩 = (理论 + 实践) / 200 * 100。使用嵌套的 pandas 数据框是进行分析的最佳方式吗?

有没有办法可以做到这一点?使用 pd.DataFrame.from_dict(nested_dict) 似乎不太管用。我得到的是 -

                             Marks
Biology  {'Theo': 89, 'Prac': 100}
Physics  {'Theo': 99, 'Prac': 100}

1 个回答

1

要把嵌套的数据变成平铺的格式,可以手动使用concat和字典推导式,然后再用unstackto_frame和转置的方法:

out = (pd.concat({k: pd.DataFrame(v)
                  for k, v in nested_dict.items()},
                 axis=1)
         .unstack().to_frame().T
      )

你也可以使用json_normalize,然后把列转换成多重索引(MultiIndex):

out = pd.json_normalize(nested_dict)
out.columns = out.columns.str.split('.', expand=True)

输出结果:

    Marks                  
  Physics      Biology     
     Theo Prac    Theo Prac
0      99  100      89  100

撰写回答