Вложенные 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)
Другие вопросы по тегам