JSON_Normalize Pandas со списками - PullRequest
       4

JSON_Normalize Pandas со списками

0 голосов
/ 27 апреля 2020

У меня есть файл JSON, отформатированный следующим вложенным способом.

[
  {
    "unitCode": "ABCD",
    "bedType": "Adult MT/MS",
    "census": 13,
    "subCensus": null,
    "censusDetails": [],
    "occupancy": 62,
    "occupancyStar": null,
    "occupancyAlertStatus": null,
    "columns": [
      {
        "id": "blockedBeds",
        "value": "1",
        "hoverDetails": [
          {
            "id": "bedName",
            "value": "23_1"
          }
        ]
      },
      {
        "id": "unOccupied",
        "value": "2",
        "hoverDetails": [
          {
            "id": "bedName",
            "value": "20a_2"
          },
          {
            "id": "bedName",
            "value": "22a_1"
          }
        ]
      }
    ],
    "codeEvents": null,
    "codeEventDetails": null
  },
  {
    "unitCode": "EFGH",
    "bedType": "Adult MT/MS",
    "census": 14,
    "subCensus": null,
    "censusDetails": [],
    "occupancy": 61,
    "occupancyStar": null,
    "occupancyAlertStatus": null,
    "columns": [
      {
        "id": "blockedBeds",
        "value": "1",
        "hoverDetails": [
          {
            "id": "bedName",
            "value": "52_2"
          }
        ]
      },
      {
        "id": "unOccupied",
        "value": "1",
        "hoverDetails": [
          {
            "id": "bedName",
            "value": "53_1"
          }
        ]
      }
    ],
    "codeEvents": null,
    "codeEventDetails": null
  }
]

Я пытаюсь сгладить этот файл и преобразовать его в кадр данных с помощью json_normalize. Вот мой код: testhover = json_normalize(data, ['columns'],['unitCode'])

Полученный кадр данных выглядит следующим образом:

    id          | value |   hoverDetails                                       | unitCode
0   blockedBeds | 1     |   [{'id': 'bedName', 'value': '23_1'}]               | ABCD
1   unOccupied  | 2     |   [{'id': 'bedName', 'value': '20a_2'}, {'id': '...' | ABCD
2   blockedBeds | 1     |   [{'id': 'bedName', 'value': '52_2'}]               | EFGH
3   unOccupied  | 1     |   [{'id': 'bedName', 'value': '53_1'}]               | EFGH

Мне нужен следующий формат:

    blockedBeds   |  unOccupied  |   unitCode
0 | '23_1'        |  NaN         |   ABCD
1 | NaN           |  '20a_2'     |   ABCD
2 | NaN           |  '22a_1'     |   ABCD
3 | '52_2'        |  NaN         |   EFGH
4 | NaN           |  '53_1'      |   EFGH

I не может получить доступ к данным вложенной кровати. Буду очень признателен за помощь.

1 Ответ

3 голосов
/ 27 апреля 2020

Вы должны создать список диктовок из всех oop и использовать его для создания фрейма данных.

vals = []

for item in parsed_json:
    unit_code = item['unitCode']
    for col in item['columns']:
        for hd in col['hoverDetails']:
            vals.append({'unitCode': unit_code,
                          col['id']: hd['value']})

pd.DataFrame(vals)

Вывод

  unitCode blockedBeds unOccupied
0     ABCD        23_1        NaN
1     ABCD         NaN      20a_2
2     ABCD         NaN      22a_1
3     EFGH        52_2        NaN
4     EFGH         NaN       53_1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...