Использование 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 
  • Python Как использовать ExcelWriter для записи в существующий рабочий лист
  • Statsmodels Категориальные данные из формулы (с использованием панд)
  • Как оглянуться назад на предыдущие строки из вызова функции Dataframe Pandas?
  • Вычислить ежедневные доходы с помощью Pandas DataFrame
  • Добавить промежуточные столбцы в пандах с мультииндекс
  • Расшифровка файла в потоке и чтение потока в pandas (hdf или stata)
  • Использование LabelEncoder Scikit правильно в нескольких программах
  • Python Pandas Crosstabs
  • Python - лучший язык программирования в мире.