Преобразование простого JSON в фрейм данных pandas

#python #json #pandas

#python #json #pandas

Вопрос:

Я новичок в Python и пытаюсь преобразовать следующий JSON в фрейм panda.

Формат json выглядит следующим образом. Я уменьшил столбцы и строки. Существует около 8 столбцов, и каждый json содержит около 20000 строк

 {
   "DataFeed":[
      {
         "Columns":[
            {
               "Name":"customerID",
               "Category":"Dimension",
               "Type":"String"
            },
            {
               "Name":"InvoiceID",
               "Category":"Dimension",
               "Type":"String"
            },
            {
               "Name":"storeloc",
               "Category":"Dimension",
               "Type":"String"
            }
         ],
         "Rows":[
            {
               "customerID":"id128404805",
               "InvoiceID":"IN3956",
               "storeloc":"TX359"
            },
            {
               "customerID":"id128404806",
               "InvoiceID":"IN0054",
               "storeloc":"CA235"
            },
            {
               "customerID":"id128404807",
               "InvoiceID":"IN7439",
               "storeloc":"AZ2309"

            }
         ]
      }
   ]
}
  

я пытаюсь загрузить его в фрейм данных pandas. Количество столбцов в файле json одинаковое. Количество строк составляет около 10000.

Я пытаюсь попасть в строки и вставить в таблицу после определенных вычислений.

введите описание изображения здесь

Я пытаюсь использовать json_normalize, но мне трудно перейти к уровню строк и после этого нормализоваться. Я знаю, что это должно быть решение проблемы, но я новичок в работе с Json. Спасибо

Комментарии:

1. Поток данных не похож на допустимую строку JSON. Можете ли вы подтвердить?

2. Я изменил строку JSON. Была удалена одна конечная запятая.

3. Возможно, вы пробовали что-то подобное?: pd.DataFrame.from_dict(json_data['DataFeed'][0]['Rows']) . json_data содержит строку JSON, которую вы опубликовали выше (в данном случае словарь python).

Ответ №1:

попробуйте pd.json_normalize() с record_path аргументом.

Обратите внимание, вам понадобится pandas 0.25 или выше.

предполагая, что ваш объект json j

 df = pd.json_normalize(j,record_path=['DataFeed','Rows'])
print(df)
    customerID InvoiceID storeloc
0  id128404805    IN3956    TX359
1  id128404806    IN0054    CA235
2  id128404807    IN7439   AZ2309