熊猫json_normalize在递归嵌套的json上

时间:2019-02-06 15:04:51

标签: python json pandas recursion

我有一个具有深度嵌套的递归结构的json文件:

{"children": [ 
              "val" = x
              "data" = y
              "children": [{ 
                           "val" = x
                           "data" = y
                           "children": [{ 
                                         ....
              "val" = x
              "data" = y
              "children": [{ 
                           "val" = x
                           "data" = y
                           "children": [{ 
                                         ....

按以下方式使用熊猫json_normalize

json_normalize(data = self.data["children"], record_path="children")

赋予数据框第一个层次为扁平的,但更深层次的层次保留在数据框中的json字符串。

我如何展平数据框,以便将整个json树解压并展平?

1 个答案:

答案 0 :(得分:0)

提供json的格式正确,并且在所有级别上都具有相同的结构,您可以通过将关键字的 List 传递给每个级别的json_normalize来提取所有数据。

json = {'children': [{
          'val': 1,
          'data': 2,
          'children': [{
                       'val': 3,
                       'data' : 4,
                       'children': [{'val' : 4,
                                     'data' : 5}],
                       }],
          },{
          'val' : 6,
          'data' : 7,
          'children': [{
                       'val' : 8,
                       'data' : 9,
                       'children': [{'val' : 10,
                                     'data' : 11}],
                       }]
          }]}

for i in range(1,3):
    print( json_normalize(data = json,record_path=['children']*i) )

这将提供以下输出,您可以根据需要将其递归添加到单个 DataFrame 中。

                                            children  data  val
0  [{'val': 3, 'data': 4, 'children': [{'val': 4,...     2    1
1  [{'val': 8, 'data': 9, 'children': [{'val': 10...     7    6
                    children  data  val
0    [{'val': 4, 'data': 5}]     4    3
1  [{'val': 10, 'data': 11}]     9    8
   data  val
0     5    4
1    11   10