使用 json_normalize 从嵌套值构建 table

Using json_normalize to build table from nested values

我 运行 在使用 json_normalize 时遇到麻烦,因为 record_path 指向一个列,其中有一个嵌套的字典,然后包含一个列表。参见下面的示例。

鉴于以下情况:

list_of_dict = [
{
    'SCHOOL_NAME': 'SCHOOL_A',
    'STUDENTS': [
        {
            'STUDENT_NAME': 'JOHN',
            'STUDENT_ID': '1'
        },
        {
            'STUDENT_NAME': 'JANE',
            'STUDENT_ID': '2'
        },
    ]
},
{
    'SCHOOL_NAME': 'SCHOOL_B',
    'STUDENTS': [
        {
            'STUDENT_NAME': 'HENRY',
            'STUDENT_ID': '1'
        },
        {
            'STUDENT_NAME': 'MARK',
            'STUDENT_ID': '2'
        },
    ]
}]

我可以使用

将其展平
pd.json_normalize(data=list_of_dict, record_path='STUDENTS', meta=['SCHOOL_NAME'])[['SCHOOL_NAME', 'STUDENT_ID', 'STUDENT_NAME']]

获得以下内容:

Expected Output

如果 list_of_dict 的结构如下,我如何获得类似的输出格式: ** 注意添加 STUDENT_LIST **

list_of_dict = [
{
    'SCHOOL_NAME': 'SCHOOL_A',
    'STUDENT_LIST':{
        'STUDENTS': [
            {
                'STUDENT_NAME': 'JOHN',
                'STUDENT_ID': '1'
            },
            {
                'STUDENT_NAME': 'JANE',
                'STUDENT_ID': '2'
            },
        ]
    }

},
{
    'SCHOOL_NAME': 'SCHOOL_B',
    'STUDENT_LIST': {
        'STUDENTS': [
            {
                'STUDENT_NAME': 'HENRY',
                'STUDENT_ID': '1'
            },
            {
                'STUDENT_NAME': 'MARK',
                'STUDENT_ID': '2'
            },
        ]
    }
}]

dict comprehensionpop 一起使用:

# Just pop key `STUDENT_LIST` and your list_of_dict is back like before
In [680]: a = [{**x, **x.pop('STUDENT_LIST')} for x in list_of_dict]

# Now use `json_normalize`
In [684]: pd.json_normalize(a, record_path='STUDENTS', meta=['SCHOOL_NAME'])
Out[684]: 
  STUDENT_NAME STUDENT_ID SCHOOL_NAME
0         JOHN          1    SCHOOL_A
1         JANE          2    SCHOOL_A
2        HENRY          1    SCHOOL_B
3         MARK          2    SCHOOL_B