Вложенные JSON и панды
У меня есть вложенный файл JSON, который выглядит следующим образом (первые 2 из многих объектов):
{
"Abaddon the Despoiler": {
"Abaddon the Despoiler": {
"model_count": "1",
"points_value": "220\u2022",
"movement": "6\"",
"weapon_skill": "2+",
"ballistic_skill": "2+",
"strength": "5",
"toughness": "5",
"wounds": "8",
"attacks": "6",
"leadership": "10",
"save": "2+"
}
},
"Chaos Lord": {
"Chaos Lord": {
"model_count": "1",
"points_value": "80",
"movement": "6\"",
"weapon_skill": "2+",
"ballistic_skill": "2+",
"strength": "4",
"toughness": "4",
"wounds": "5",
"attacks": "4",
"leadership": "9",
"save": "3+"
}
},
Я хотел бы преобразовать это во фрейм данных, который выглядит следующим образом:
Я думаю, что решение - использовать pandas json_normalize()
#load json object
with open('./archive/chaos-space-marines.json') as f:
d = json.load(f)
nycphil = pd.json_normalize(d)
nycphil.head(3)
однако, когда я делаю следующее, я получаю фрейм данных, состоящий из 1 строки x 115 столбцов с именами столбцов, например
Abaddon the Despoiler.Abaddon the Despoiler.model_count
Abaddon the Despoiler.Abaddon the Despoiler.points_value
Abaddon the Despoiler.Abaddon the Despoiler.movement
Abaddon the Despoiler.Abaddon the Despoiler.weapon_skill
Любые идеи?
1 ответ
Решение
Я бы предложил
list-comprehension
это читает ваш
dict
:
d = {'Abaddon the Despoiler': {'Abaddon the Despoiler': {'model_count': '1', 'points_value': '220•', 'movement': '6"', 'weapon_skill': '2+', 'ballistic_skill': '2+', 'strength': '5', 'toughness': '5', 'wounds': '8', 'attacks': '6', 'leadership': '10', 'save': '2+'}},
'Chaos Lord': {'Chaos Lord': {'model_count': '1', 'points_value': '80','movement': '6"', 'weapon_skill': '2+', 'ballistic_skill': '2+', 'strength': '4', 'toughness': '4', 'wounds': '5', 'attacks': '4', 'leadership': '9', 'save': '3+'}}}
data = [{'unit': key, **values[key]} for key, values in d.items()]
nycphil = pd.DataFrame(data)