将嵌套字典转换为数据框

时间:2021-06-30 12:55:48

标签: python python-3.x pandas dataframe dictionary

假设我有一本像下面这样的字典

sample_dict = {
    0: {
        'Name': {'First': 'Jack', 'Last': 'Daniels'},
        'Age': 22,
        'University': 'BHU',
    },
    1: {
        'Name': {'First': 'Mark', 'Last': 'Zuckerberg'},
        'Age': 21,
        'University': 'JNU',
    },
    2: {
        'Name': {'First': 'Tim', 'Last': 'Cook'},
        'Age': 23,
        'University': 'DU',
    }
} 

我想把这个字典转换成Dataframe

预期输出:

        Name             Age       University
  First      Last  
  Jack       Daniels       22       BHU
  Mark       Zuckerberg    21       JNU
  Tim        Cook          23       DU

同时执行以下代码

df = pd.DataFrame(details).T

我得到的结果输出为:

                                      Name Age University
0     {'First': 'Jack', 'Last': 'Daniels'}  22        BHU
1  {'First': 'Mark', 'Last': 'Zuckerberg'}  21        JNU
2         {'First': 'Tim', 'Last': 'Cook'}  23         DU

欢迎提出想法!!

提前致谢!!

2 个答案:

答案 0 :(得分:0)

json_normalize 非常强大。您可以在 dict 值上调用它。

import pandas as pd

sample_dict = {
    0: {
        'Name': {'First': 'Jack', 'Last': 'Daniels'},
        'Age': 22,
        'University': 'BHU',
    },
    1: {
        'Name': {'First': 'Mark', 'Last': 'Zuckerberg'},
        'Age': 21,
        'University': 'JNU',
    },
    2: {
        'Name': {'First': 'Tim', 'Last': 'Cook'},
        'Age': 23,
        'University': 'DU',
    }
} 


pd.json_normalize(sample_dict.values())

输出

   Age University Name.First   Name.Last
0   22        BHU       Jack     Daniels
1   21        JNU       Mark  Zuckerberg
2   23         DU        Tim        Cook

答案 1 :(得分:0)

另一种方式:

df=pd.DataFrame(sample_dict).T
#Then:
df=pd.DataFrame(df.pop('Name').to_list()).add_prefix('Name.').join(df.add_prefix('.'))
#Finally:
df=df.sort_index(axis=1)
df.columns=df.columns.str.split('.',expand=True)

现在,如果您打印 df,您将获得预期的输出