Я пытаюсь сгладить или нормализовать этот очень вложенный json в фрейм данных с пандами.
Проблема в том, что на каждом уровне имена и свойства совпадают.
Я не нашел ни одного вопроса панды, похожего на этот. Но я вижу 2 похожих вопроса, но они написаны на R и JavaScript: Нормализация глубоко вложенных объектов и Нормализация глубоко вложенных объектов Я не знаю, можете ли вы вдохновиться этим.
Мой оригинальный файл 40M. Вот пример этого:
data = [
{
"id": "haha",
"type": "table",
"composition": [
{
"id": "AO",
"type": "basket",
},
{
"id": "KK",
"type": "basket",
# "isAutoDiv": false,
"composition": [
{
"id": "600",
"type": "apple",
"num": 1.116066714
},
{
"id": "605",
"type": "apple",
"num": 1.1166976714
}
]
}
]
},
{
"id": "hoho",
"type": "table",
"composition": [
{
"id": "KT",
"type": "basket"
},
{
"id": "OT",
"type": "basket"
},
{
"id": "CL",
"type": "basket",
# "isAutoDiv": false,
"composition": [
{
"id": "450",
"type": "apple"
},
{
"id": "630",
"type": "apple"
},
{
"id": "023",
"type": "index",
"composition": [
{
"id": "AAOAAOAOO",
"type": "applejuice"
},
{
"id": "MMNMMNNM",
"type": "applejuice"
},
]
}
]
}
]
}
]
Видите? Имена и свойства одинаковы на всех уровнях.
Я использовал эту строку, чтобы нормализовать ее. Но я не знаю, как нормализовать объекты, вложенные во вложенные объекты, когда они имеют одинаковые имена и свойства:
df = json_normalize(data, record_path = ['composition'], meta = ['id', 'type'], record_prefix = 'compo_')
compo_composition compo_id compo_type id type
0 NaN AO basket haha table
1 [{'id': '600', 'type': 'apple', 'num': 1.11606... KK basket haha table
2 NaN KT basket hoho table
3 NaN OT basket hoho table
4 [{'id': '450', 'type': 'apple'}, {'id': '630',... CL basket hoho table
Вы видите в столбце "compo_composition", что они все еще являются вложеннымиобъекты.
Теперь я хочу, чтобы в нем были следующие столбцы:
compo_compo_compo__id compo_compo_compo_type compo_compo__id compo_compo_type compo_id compo_type id type
Тонны благодарностей. Это расстраивает меня в течение нескольких дней, и я нигде не нашел ответа.