Вложенный фрейм данных JSON в Pandas

Введите JSON

{
    "tables": {
        "Cloc": {
            "MINT": {
                "CANDY": {
                    "Mob": [{
                            "loc": "AA",
                            "loc2": ["AAA"]
                        },
                        {
                            "loc": "AA",
                            "loc2": ["AAA"]
   
                        }
                    ]
                }
            }
        },
        "T1": {
            "MINT": {
                "T2": {
                    "T3": [{
                        "loc": "AAA",
                        "loc2": ["AAA"]
                    }]
                }
            }
        }
    }
}

Ожидаемый результат

=========================================

Я попытался обработать этот вложенный JSON, используя pd.json_normalize().

data = pd.DataFrame(nested_json['tables']['Cloc']['MINT']['CANDY']['Mob'])

Я понятия не имею, как действовать, любая помощь или руководство высоко ценятся.

Большое спасибо!!

могут ли быть loc3 и/или loc4 на уровне 4?

RomanPerekhrest 23.01.2023 21:21

Добрый день Роман, спасибо за ответ! Да может быть больше loc3 и loc4 и т.д.!

Alind Billore 23.01.2023 21:31

Есть ли ограничения? в ключе CANDY может быть список словарей? или если мы подходим к списку, значит мы в самом "глубоком" словаре?

CodeCop 23.01.2023 22:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что только последний уровень состоит из списка словарей, вы можете просто вычислить строки. Мы могли бы сделать это рекурсивно, чтобы это работало для любого количества уровней вложенности.

rows = []
def find_rows(x, current_row):
    if isinstance(x, dict):
        for k,v in x.items():
            find_rows(v, current_row+[k])
    else: # we are at the final level, where we have a list of dictionaries
        for locs_map in x:
            for v in locs_map.values():
                rows.append(current_row+[v])

find_rows(d['tables'], [])
# Now I'm assuming you have only the number of levels as in your example
data = pd.DataFrame.from_records(rows, columns= ['Tables', 'L_1', 'L_2', 'L_3', 'L_4'])
data = data.loc[data.astype(str).drop_duplicates().index]

Другие вопросы по теме