Вложенный JSON в Dataframe в Python 3.7 - PullRequest
0 голосов
/ 03 апреля 2019

С трудом пытаюсь преобразовать вложенный объект JSON в фрейм данных в желаемом формате.Предполагалось, что это будет действительно просто, но чуть не вырвет мне волосы!

Вот пример моей структуры JSON.

{
  "recipe1" : {
       "abbie" : 2,
       "ben" : 3,
       "chris" : 1
       },
  "recipe2" : {
       "abbie" : 1,
       "ben" : 5,
       "chris" : 5
       }
}

После нескольких опций я решил использовать библиотеку панд, так как она кажется самой простой в использовании.

Результатом в этом примере является запрос к моей базе данных, извлекающий данные JSON, которые мне удалось получить.

 dataframe = json_normalize(result)
 print(dataframe) 

Дает мне в одной строке следующее:

 recipe1.abbie | recipe1.ben | recipe1.chris | recipe2.abbie | ..
      2        |      3      |       1       |       1       | ..

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

               |   Recipe 1  |   Recipe 2    |  
  Abbie        |      2      |       1       |
  Ben          |      3      |       5       |
  Chris        |      1      |       5       |

ПослеГлядя на этот сайт и в других местах, я считаю, что мне нужно использовать функцию Pivot, но, к сожалению, после всего утра я не приблизился к решению.

заранее спасибо за любую помощь, буду очень признателен.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Просто используйте

frame = pd.DataFrame.from_records(data)

нормализует , который вы используете, сглаживает словарь и создает серию.

0 голосов
/ 03 апреля 2019

Полагаю, ваш json продолжает "recipe3" и так далее? Могут ли быть другие люди, кроме Эбби, Бена и Криса?

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

0 голосов
/ 03 апреля 2019

Вы можете использовать pd.read_json и передать orient=records (по умолчанию это все равно), чтобы прочитать ваш файл json либо в «filename», либо в файловом буфере.

>>> import pandas as pd
>>> df = pd.read_json("sample.json", orient="records")
>>> df
       recipe1  recipe2
abbie        2        1
ben          3        5
chris        1        5

Подробнее с здесь

...