亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

flatten_json 列表的遞歸展平函數

flatten_json 列表的遞歸展平函數

慕娘9325324 2022-10-11 21:39:17
我想在每個級別展平以下 JSON 并為每個級別創建一個 pandas 數據框,flatten_json我曾經這樣做過,但為此我需要遍歷每個級別,從而創建多個嵌套的 for 循環:{"metadata": {    "name": "abc",    "time": "2020-04-01"},"data": [    {        "identifiers": [            {                "type": "abc",                "scheme": "def",                "value": "123"            },            {                "type": "abc",                "scheme": "def",                "value": "123"            }        ],        "name": "qwer",        "type": "abd",        "level1": [            {                "identifiers": [                    {                        "type": "abc",                        "scheme": "def",                        "value": "123"                    },                    {                        "type": "abc",                        "scheme": "def",                        "value": "123"                    }                ],                "name": "asd",                "type": "abd",                "level2": [                    {                        "identifiers": [                            {                                "type": "abc",                                "scheme": "def",                                "value": "123"                            },                            {                                "type": "abc",                                "scheme": "def",                                "value": "123"                            }                        ],                        "name": "abs",                        "type": "abd"                    },         
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我使用遞歸解決了它,這是我的代碼:


import json

import pandas as pd

import flatten_json as fj


keys = {'data', 'level1', 'level2', 'level3'}

with open('test_lh.json') as f:

    data = json.load(f)


levels = ['data.level1.level2.level3', 'data.level1.level2', 'data.level1', 'data']

recs_dict = {}


def do_step(data_dict, level, depth, path):

    recs = []

    for x in data_dict[level]:

        if depth < len(path.split('.'))-1:

            do_step(x, path.split('.')[depth+1], depth+1, path)

        else:

            dic = fj.flatten(x, root_keys_to_ignore=keys)

            recs.append(dic)

    recs_dict[level] = recs


for path in levels:

    do_step(data, path.split('.')[0], 0, path)


for key, value in recs_dict.items():

    print(key)

    df = pd.DataFrame(recs_dict[key])

    print(df)

這是輸出:


level3

  identifiers_0_type identifiers_0_scheme identifiers_0_value identifiers_1_type identifiers_1_scheme identifiers_1_value name    type

0                abc                  def                 123                abc                  def                 123  abs  level3

1                abc                  def                 123                abc                  def                 123  abs  level3

level2

  identifiers_0_type identifiers_0_scheme identifiers_0_value identifiers_1_type identifiers_1_scheme identifiers_1_value name    type

0                abc                  def                 123                abc                  def                 123  abs  level2

1                abc                  def                 123                abc                  def                 123  abs     abd

level1

  identifiers_0_type identifiers_0_scheme identifiers_0_value identifiers_1_type identifiers_1_scheme identifiers_1_value name    type

0                abc                  def                 123                abc                  def                 123  asd  level1

data

  identifiers_0_type identifiers_0_scheme identifiers_0_value identifiers_1_type identifiers_1_scheme identifiers_1_value  name type

0                abc                  def                 123                abc                  def                 123  qwer  abd



查看完整回答
反對 回復 2022-10-11
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號