Pandas ошибка при чтении ключевого узла, который также является объектом - PullRequest
1 голос
/ 17 июня 2020

У меня есть простой JSON, который выглядит так

{"dV":201,"data1":{"test":"ok","data2":[{"id":1,"summary":{"openingBalance":"-7583.48","totalCredits":"1203.52"},"additionalDetails":{"email":"XXXXXXXX@outlook.com","phone":"XXXX XXX 333"}}]}}

Я нормализую это JSON, выполняя следующие действия

import pandas as pd
textInJSON = '{"dV":201,"data1":{"test":"ok","data2":[{"id":1,"summary":{"openingBalance":"-7583.48","totalCredits":"1203.52"},"additionalDetails":{"email":"XXXXXXXX@outlook.com","phone":"XXXX XXX 333"}}]}}'
d = pd.read_json(textInJSON)
df = pd.json_normalize(d['data1']['data2'])

Почему я получаю сообщение об ошибке при выполнении что-то вроде этого?

df['additionalDetails']

но когда я делаю что-то вроде строки ниже, я могу получить информацию (XXXXXXXX@outlook.com):

df['additionalDetails.email']

Потому что я думал, что смогу сделать:

df['additionalDetails']['email']

1 Ответ

0 голосов
/ 17 июня 2020

Если вы распечатаете свой фрейм данных

print(df)

, вы увидите, что на самом деле вы получаете следующее:

id summary.openingBalance summary.totalCredits additionalDetails.email additionalDetails.phone
01               -7583.48              1203.52 XXXXXXXX@outlook.com    XXXX XXX 333

Это говорит мне, что ваш summary на самом деле словарь лайк.

Итак, когда вы делаете pd.json_normalize(d['data1']['data2']) pandas, вам нужно как-то преобразовать это вложение в фрейм данных.

Вот почему к значениям нужно обращаться так, как вы показали.

Вот лучшая визуализация ваших данных:

textInJSON = '''{
    "dV": 201,
    "data1": {
        "test": "ok",
        "data2": [{
            "id": 1,
            "summary": {
                "openingBalance": "-7583.48",
                "totalCredits": "1203.52"
            },
            "additionalDetails": {
                "email": "XXXXXXXX@outlook.com",
                "phone": "XXXX XXX 333"
            }
        }]
    }
}'''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...