Вложенный JSON Normalize с использованием Pandas, KeyError: «Попробуйте запустить с ошибками ='игнорировать', поскольку ключ 'company' не всегда присутствует»

Я пытаюсь нормализовать JSON, полученный из GraphQL API, и преобразовать его в фрейм данных с помощью json_normalize JSON

              [{
          "node": {
            "organization": {
              "company": "System"
            },
            "id": "15",
            "ip": "10.6.11.110",
            "name": "devce_name",
            "deviceClass": {
              "logicalName": "class OEM",
              "class": "class",
              "description": "OEM",
              "deviceCategory": {
                "name": "Unknown"
              }
            },
            "asset": {
              "location": "",
              "make": "make"
            },
            "events": {
              "edges": [
                {
                  "node": {
                    "message": "Device message",
                    "severity": "3
                  }
                },
                {
                  "node": {
                    "message": "message",
                    "severity": "2",
                  }
                }
              ]
            }
          }
        },
        ...
     ]

Это json_normalize с использованием панд, которые я пытаюсь

      nd = pd.json_normalize(
    res,
    record_path=["node", "events", "edges"],
    meta= [["node", "organization", "company"], ["node", "name"], ["node", "ip"], ["node", "id"], ["node", "deviceClass"]]
)

Если мета-внутренний размер был равен 2, то ошибки нет,

например: - meta= [["узел", "организация"], ["узел", "имя"], ["узел", "ip"], ["узел", "идентификатор"], ["узел" , "deviceClass"]]

но когда я попытался найти более двух в списке, я получил ошибку ниже.

например: meta= [["узел", "организация", "компания"], ["узел", "имя"], ["узел", "идентификатор"], ["узел", "класс устройства"]]

**KeyError: 'company' Вышеупомянутое исключение было прямой причиной следующего исключения:....KeyError: «Попробуйте запустить с ошибками ='игнорировать', поскольку ключ 'company' не всегда присутствует» **

Как добавить больше 3-х полей внутри меты?

Спасибо

1 ответ

Решение

Я столкнулся с той же проблемой пару дней назад, вы можете попробовать что-то другое, например

      nd1 = pd.json_normalize(js, record_path=["node", "events","edges"], /
                         meta = [["node", "id"]])

nd2 = pd.merge(nd1, pd.json_normalize(js), on='node.id',how='left')
Другие вопросы по тегам