Json_Normalize, нацеливание на вложенные столбцы в определенном столбце c? - PullRequest
0 голосов
/ 17 июня 2020

Я работаю с API, пытаясь извлечь из него данные. Проблема, с которой я столкнулся, заключается в том, что большинство столбцов являются прямыми и не вложенными, за исключением столбца CustomFields, в котором есть все различные настраиваемые поля, используемые в списке для каждой записи.

Использование json_normalize Есть ли способ настроить таргетинг на вложенный столбец, чтобы сгладить его? Я пытаюсь получить и использовать все данные, доступные из API, но, в частности, один вложенный столбец вызывает головную боль.

Данные JSON при извлечении из API выглядят следующим образом. Это только для одного профиля клиента,

[{'EmailAddress': 'an_email@gmail.com', 'Name': 'Al Smith’, 'Date': '2020-05-26 14:58:00', 'State': 'Active', 'CustomFields': [{'Key': '[Location]', 'Value': 'HJGO'}, {'Key': '[location_id]', 'Value': '34566'}, {'Key': '[customer_id]', 'Value': '9051'}, {'Key': '[status]', 'Value': 'Active'}, {'Key': '[last_visit.1]', 'Value': '2020-02-19'}]

Использование json_normalize,

payload = json_normalize(payload_json['Results'])

Вот результаты, когда я запускаю приведенный выше код,

enter image description here

В идеале я бы хотел, чтобы конечный результат выглядел так:

What I would like the results to look like

Думаю, я просто нужно работать с параметром record_path и meta, но я не совсем понимаю, как они работают.

Есть идеи? Или использование json_normalize в этой ситуации не сработает?

1 Ответ

1 голос
/ 17 июня 2020

Попробуйте это, у вас квадратные скобки в JSON, поэтому вы видите эти []:

d = [{'EmailAddress': 'an_email@gmail.com', 'Name': 'Al Smith', 'Date': '2020-05-26 14:58:00', 'State': 'Active', 'CustomFields': [{'Key': '[Location]', 'Value': 'HJGO'}, {'Key': '[location_id]', 'Value': '34566'}, {'Key': '[customer_id]', 'Value': '9051'}, {'Key': '[status]', 'Value': 'Active'}, {'Key': '[last_visit.1]', 'Value': '2020-02-19'}]}]
df = pd.json_normalize(d, record_path=['CustomFields'], meta=[['EmailAddress'], ['Name'], ['Date'], ['State']])
df = df.pivot_table(columns='Key', values='Value', index=['EmailAddress', 'Name'], aggfunc='sum')
print(df)

Вывод:

Key                         [Location] [customer_id] [last_visit.1] [location_id] [status]
EmailAddress       Name
an_email@gmail.com Al Smith       HJGO          9051     2020-02-19         34566   Active
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...