Вложенные JSON и Pandas Normalize - PullRequest
       2

Вложенные JSON и Pandas Normalize

0 голосов
/ 27 ноября 2018

У меня есть некоторые данные JSON, возвращенные, как показано ниже: (Я не могу изменить структуру)

[
  {
    "id": "d6aca8ac",
    "owner": "test",
    "sections": {
      "summary": {
        "id": "d417cd0e",
        "notes": "",
        "created_at": "2018-11-26T19:02:06Z"
      },
      "weather": {
        "id": "7ef34660",
        "notes": ""
      },
      "task": {
        "id": "255d86dc",
        "tasks": [
          {
            "id": "t1",
            "total_hours": 176.0,
            "updated_at": "2018-11-26T19:02:06Z",
            "created_at": "2018-11-26T19:02:06Z"
          },
          {
            "id": "t2",
            "total_hours": 176.0,
            "updated_at": "2018-11-26T19:02:06Z",
            "created_at": "2018-11-26T19:02:06Z"
          }
        ]
      }
    }
  }
]

Я пытаюсь использовать json_normalise из pandas, чтобы получить задачи в кадре данных, например так:

+----+-------------+----------------------+----------------------+
| id | total_hours |      updated_at      |      created_at      |
+----+-------------+----------------------+----------------------+
| t1 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
| t2 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
+----+-------------+----------------------+----------------------+

У меня есть сценарий, который перебирает сотни файлов JSON в папке, применяя другой путь записи в зависимости от имени файла, и это работает для них всех, кроме этой одной структуры, поэтому я действительно хотел бы посмотреть, смогу ли я получить эторезультат с использованием чего-то похожего (это, очевидно, не работает):

normalised_data = json_normalize(data=json_data, record_path=['sections', 'task', 'tasks'], meta=['id'], meta_prefix='parent_' , errors='ignore')

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

Спасибо,

1 Ответ

0 голосов
/ 27 ноября 2018

Не используя вложенный список для вашего record_path, все следующие пути фактически пытаются проиндексировать ключи, возвращаемые первым путем, которые являются строками, поэтому я предполагаю, что вы получаете TypeError.

Вы должны определить весь путь в своем собственном подсписке:

pd.io.json.json_normalize(json_data, record_path=[['sections', 'task', 'tasks']])

             created_at  id  total_hours            updated_at
0  2018-11-26T19:02:06Z  t1        176.0  2018-11-26T19:02:06Z
1  2018-11-26T19:02:06Z  t2        176.0  2018-11-26T19:02:06Z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...