Как раскрыть словарь внутри датафрейма

Рейтинг: 1Ответов: 1Опубликовано: 29.05.2023

Необходимо раскрыть в датафрейме колонки posting, items, services, чтобы получился единый датафрейм. Подскажите пожалуйста как правильно действовать в таких ситуациях ?

{'result': {'operations': [{'operation_id': 12228515174,
'operation_type': 'OperationAgentDeliveredToCustomer',
'operation_date': '2023-05-01 00:00:00',
'operation_type_name': 'Доставка покупателю',
'delivery_charge': 0,
'return_delivery_charge': 0,
'accruals_for_sale': 464,
'sale_commission': -41.76,
'amount': 353.72,
'type': 'orders',
'posting': {'delivery_schema': 'FBO',
 'order_date': '2023-04-21 08:08:35',
 'posting_number': '72171510-0032-1',
 'warehouse_id': 20125378182},
'items': [{'name': 'Набор швейных ниток для ручного и машинного шитья 40ЛШ "Ленинградский" 150 м., 30 цветов.',
  'sku': 927384251}],
'services': [{'name': 'MarketplaceServiceItemFulfillment', 'price': 0},
 {'name': 'MarketplaceServiceItemDelivToCustomer', 'price': -25.52},
 {'name': 'MarketplaceServiceItemDirectFlowTrans', 'price': 0},
 {'name': 'MarketplaceServiceItemDirectFlowLogistic', 'price': -43}]}

текст, выделенный жирным шрифтом

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

Ответы

▲ 1

просто примените к словарям pd.Series:

import pandas as pd

d = {"first":[1,2,3,4], "second":[{"A":1, "B":2, "C":3, "D":4}, {"A":11, "B":22, "C":33, "D":44},{"A":111, "D":4444},4]}
df = pd.DataFrame(d)
   first                                second
0      1      {'A': 1, 'B': 2, 'C': 3, 'D': 4}
1      2  {'A': 11, 'B': 22, 'C': 33, 'D': 44}
2      3                 {'A': 111, 'D': 4444}
3      4                                     4

вот так:

df = df.join(df["second"].apply(pd.Series))
   first                                second      A     B     C       D    0
0      1      {'A': 1, 'B': 2, 'C': 3, 'D': 4}    1.0   2.0   3.0     4.0  NaN
1      2  {'A': 11, 'B': 22, 'C': 33, 'D': 44}   11.0  22.0  33.0    44.0  NaN
2      3                 {'A': 111, 'D': 4444}  111.0   NaN   NaN  4444.0  NaN
3      4                                     4    NaN   NaN   NaN     NaN  4.0