Ошибка с JSON вложенными значениями через Python json_normalize - PullRequest
1 голос
/ 10 марта 2020

Несмотря на просмотр многочисленных примеров + решений, я не нашел ничего, что работает на этой конкретной схеме JSON.

У меня есть строка JSON, поступающая из API:

x = {'rows': [{'columns':
                 [{'name': 'User ID', 'value': '0000123'},
                 {'name': 'Last Name', 'value': 'Test1'}]},
              {'columns':
                 [{'name': 'User ID', 'value': '0000567'},
                 {'name': 'Last Name', 'value': 'Test2'}]}]}

И по какой-то причине я не могу получить его для вывода с различными формами json_normalize, самое близкое, что я могу получить, это их сложить.

pd.json_normalize(data=x,record_path=['rows',['columns']])

С результатом:

        name    value
0    User ID  0000123
1  Last Name    Test1
2    User ID  0000567
3  Last Name    Test2

Но я ищу его для вывода:

User ID  Last Name
0000123  Test1
0000567  Test2

Я смотрю в сводку, но нет полезного индекса. Могу ли я добавить значение массива? В качестве альтернативы, может быть просто лучший способ создания фрейма данных, чтобы его можно было легко нормализовать.

Помощь приветствуется.

1 Ответ

0 голосов
/ 10 марта 2020

Кто-то может иметь лучший ответ, но если вы проверите источник json_normalize ( ссылка ), это «катастрофически неэффективно на данный момент» и просто использует понимание списка и циклы. Таким образом, вы скорее всего не потеряете эффективность, нормализуя свои данные вручную. Вот пример, написанный для ясности (т. Е. Он не будет отлично масштабироваться, если вы извлекаете большие jsons), который перебирает ваши данные для построения полей:

normalized_data={'User ID':[],'Last Name':[]}
for row in x['rows']:
    for column in row['columns']:
        normalized_data[column['name']].append(column['value'])

df=pd.DataFrame(normalized_data)
print(df)

print:

   User ID Last Name
0  0000123     Test1
1  0000567     Test2

Очевидно, что он не идеален и хотел бы видеть другие ответы, но, учитывая, что jsons поставляется с открытым форматированием, будет трудно найти метод pandas, который будет работать "из коробки", если вам не повезло иметь ваша json структура соответствует тем, с которыми pandas может справиться.

...