Использование Pandas json_normalize для вложенных Json с массивами

Проблема заключается в нормализации json с вложенным массивом объектов json. Я посмотрел на подобные вопросы и попытался использовать их решение безрезультатно.

Вот как выглядит мой json-объект.

{ "results": [ { "_id": "25", "Product": { "Description": "3 YEAR", "TypeLevel1": "INTEREST", "TypeLevel2": "LONG" }, "Settlement": {}, "Xref": { "SCSP": "96" }, "ProductSMCP": [ { "SMCP": "01" } ] }, { "_id": "26", "Product": { "Description": "10 YEAR", "TypeLevel1": "INTEREST", "Currency": "USD", "Operational": true, "TypeLevel2": "LONG" }, "Settlement": {}, "Xref": { "BBT": "CITITYM9", "TCK": "ZN" }, "ProductSMCP": [ { "SMCP": "01" }, { "SMCP2": "02" } ] } ] } 

Вот мой код для нормализации json-объекта.

 data = json.load(j) data = data['results'] print pd.io.json.json_normalize(data) 

Результаты, которые я ХОЧУ, должны быть такими

 id Description TypeLevel1 TypeLevel2 Currency \ 25 3 YEAR US INTEREST LONG NAN 26 10 YEAR US INTEREST NAN USD BBT TCT SMCP SMCP2 SCSP NAN NAN 521 NAN 01 M9 ZN 01 02 NAN 

Однако я получаю следующее:

  Product.Currency Product.Description Product.Operational Product.TypeLevel1 \ 0 NaN 3 YEAR NaN INTEREST 1 USD 10 YEAR True INTEREST Product.TypeLevel2 ProductSMCP Xref.BBT Xref.SCSP \ 0 LONG [{'SMCP': '01'}] NaN 96 1 LONG [{'SMCP': '01'}, {'SMCP2': '02'}] CITITYM9 NaN Xref.TCK _id 0 NaN 25 1 ZN 26 

Как вы можете видеть, проблема заключается в ProductSCMP , она не полностью сглаживает массив.

One Solution collect form web for “Использование Pandas json_normalize для вложенных Json с массивами”

Как только мы закончим первую нормализацию, я применил lambda чтобы закончить работу.

 from cytoolz.dicttoolz import merge pd.io.json.json_normalize(data).pipe( lambda x: x.drop('ProductSMCP', 1).join( x.ProductSMCP.apply(lambda y: pd.Series(merge(y))) ) ) Product.Currency Product.Description Product.Operational Product.TypeLevel1 Product.TypeLevel2 Xref.BBT Xref.SCSP Xref.TCK _id SMCP SMCP2 0 NaN 3 YEAR NaN INTEREST LONG NaN 96 NaN 25 01 NaN 1 USD 10 YEAR True INTEREST LONG CITITYM9 NaN ZN 26 01 02 

Имена столбцов обрезки

 pd.io.json.json_normalize(data).pipe( lambda x: x.drop('ProductSMCP', 1).join( x.ProductSMCP.apply(lambda y: pd.Series(merge(y))) ) ).rename(columns=lambda x: re.sub('(Product|Xref)\.', '', x)) Currency Description Operational TypeLevel1 TypeLevel2 BBT SCSP TCK _id SMCP SMCP2 0 NaN 3 YEAR NaN INTEREST LONG NaN 96 NaN 25 01 NaN 1 USD 10 YEAR True INTEREST LONG CITITYM9 NaN ZN 26 01 02 
  • Идентификатор группы кадров данных, создайте значение: count в столбце
  • словарь python для pandas dataframe с несколькими столбцами
  • Как выбрать столбцы из dataframe с помощью регулярных выражений
  • Преобразование выбранных столбцов в кадре данных Pandas в массив Numpy
  • Символ Pandas ParserError EOF при чтении нескольких CSV-файлов на HDF5
  • Производительность создания нового DataFrame
  • В Python-Pandas, как я могу подмножить фрейм данных с помощью определенных значений индекса datetime?
  • Drop NaN-ячейки и перемещение ненулевых значений в соответствии с индексом Datetime
  • Возвратите несколько столбцов из применяемых панд
  • Самый эффективный способ определения периодов перекрытия в Python
  • Pandas dropna - магазин упал рядами
  •  
    Interesting Posts for Van-Lav

    Сортировка кортежей Python на основе последнего элемента

    Используя PySerial, можно ли ждать данных?

    Почему я не должен использовать async (evented) IO

    Плагин python 3.2: создание экземпляра класса / метакласса

    Как «заблокировать клавиатуру», чтобы предотвратить отправку других нажатий на X11 / Linux / Gnome?

    Можно ли добавить пакеты PyQt4 / PySide в песочницу Virtualenv?

    Патч Python mock не работает так, как ожидалось, для общедоступного метода

    Как поймать `CParserError` при чтении CSV-файла

    Учебник Django, Получение: ТипError at / admin / argument для reverse () должен быть последовательностью

    Многострочная строка с аргументами. Как объявить?

    Scapy на PlanetLab

    Python, ImportError: undefined symbol: g_utf8_skip

    Python – вероятность моделирования

    Python (pandas): удаление дубликатов на основе двух столбцов, содержащих строку с максимальным значением в другом столбце

    Каков наилучший способ преобразования массива int в строку?

    Python - лучший язык программирования в мире.