Вложенный JSON извлекает ключи первого уровня и добавляет в столбец Python 3? - PullRequest
1 голос
/ 05 августа 2020

У меня есть следующий тип JSON:

import pandas as pd

data = {'Big Bean Pot': [{'name': 'bacon', 'unit': 'lb', 'amount': 0.06},
{'name': 'baked beans', 'unit': 'oz', 'amount': 2.67},
{'name': 'brown sugar', 'unit': 'cup', 'amount': 0.04},
{'name': 'canned lima beans', 'unit': 'oz', 'amount': 1.25},
{'name': 'canned red kidney beans', 'unit': 'oz', 'amount': 1.25},
{'name': 'cider vinegar', 'unit': 'cup', 'amount': 0.03},
{'name': 'garlic powder', 'unit': 'teaspoon', 'amount': 0.08},
{'name': 'ground mustard', 'unit': 'teaspoon', 'amount': 0.04},
{'name': 'ketchup', 'unit': 'cup', 'amount': 0.02},
{'name': 'onions', 'unit': 'medium', 'amount': 0.25}],
'Chicken and Potatoes': [{'name': 'chicken', 'unit': 'lbs', 'amount': 0.38},
{'name': 'garlic cloves', 'unit': '', 'amount': 0.5},
{'name': 'olive oil', 'unit': 'cup', 'amount': 0.06},
{'name': 'parmesan cheese', 'unit': 'cup', 'amount': 0.19},
{'name': 'potatoes', 'unit': 'small', 'amount': 0.75},
{'name': 'salt and pepper', 'unit': 'servings', 'amount': 1.0}]}

Я конвертирую значение (список dicts) каждого ключа в pd.json_normalize, поэтому, например, для key = 'Big Bean Pot' я буду применять pd.json_normalize(data.get('Big Bean Pot')), но я хочу, чтобы ключ был одним из столбцов. Есть ли способ добавить столбец recipe_name и поместить туда "Big Bean Pot"?

1 Ответ

2 голосов
/ 05 августа 2020

Попробуйте pandas concat:

pd.concat(pd.DataFrame(value).assign(recipe=key) for key, value in data.items())

Чтобы установить его в качестве первого столбца, пригодится numpy s np.r_:

pd.concat(pd.DataFrame(value).assign(recipe=key) for key, value in data.items()).iloc[:, np.r_[-1, 0:3]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...