使用 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 comprehension
与 pop
一起使用:
# 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
我 运行 在使用 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 comprehension
与 pop
一起使用:
# 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