Pandas: развернуть список столбцов вложенных словарей и добавить новые строкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pandas: развернуть список столбцов вложенных словарей и добавить новые строки

Сообщение Anonymous »

В качестве примера рассмотрим приведенный ниже текст:
d2 = [{'event_id': 't1',
'display_name': 't1',
'form_count': 0,
'repetition_id': None,
'children': [{'event_id': 't_01',
'display_name': 't(1)',
'form_count': 1,
'repetition_id': 't1',
'children': [],
'forms': [{'form_id': 'f1',
'form_repetition_id': '1',
'form_name': 'fff1',
'is_active': True,
'is_submitted': False}]}],
'forms': []},
{'event_id': 't2',
'display_name': 't2',
'form_count': 0,
'repetition_id': None,
'children': [{'event_id': 't_02',
'display_name': 't(2)',
'form_count': 1,
'repetition_id': 't2',
'children': [{'event_id': 't_03',
'display_name': 't(3)',
'form_count': 1,
'repetition_id': 't3',
'children': [],
'forms': [{'form_id': 'f3',
'form_repetition_id': '1',
'form_name': 'fff3',
'is_active': True,
'is_submitted': False}]}],
'forms': [{'form_id': 'f2',
'form_repetition_id': '1',
'form_name': 'fff2',
'is_active': True,
'is_submitted': False}]}],
'forms': []}]

Выше d2 находится список диктовок, где дети — это вложенный диктовку с теми же ключами, что и родительский.
Кроме того, дочерние элементы могут иметь вложенность до нескольких уровней, о чем невозможно узнать заранее. Короче говоря, я не знаю, сколько раз его продолжать взрывать.
Текущий df:
In [54]: df11 = pd.DataFrame(d2)

In [55]: df11
Out[55]:
event_id display_name form_count repetition_id children forms
0 t1 t1 0 None [{'event_id': 't_01', 'display_name': 't(1)', ... []
1 t2 t2 0 None [{'event_id': 't_02', 'display_name': 't(2)', ... []

Я хочу сгладить его, как показано ниже.
Ожидаемый результат:
event_id display_name form_count repetition_id children forms
0 t1 t1 0 None {'event_id': 't_01', 'display_name': 't(1)', '... []
1 t2 t2 0 None {'event_id': 't_02', 'display_name': 't(2)', '... []
0 t_01 t(1) 1 t1 [] [{'form_id': 'f1', 'form_repetition_id': '1', ...
1 t_02 t(2) 1 t2 {'event_id': 't_03', 'display_name': 't(3)', ... [{'form_id': 'f2', 'form_repetition_id': '1', ...
0 t_03 t(3) 0 t3 [] [{'form_id': 'f2', 'form_repetition_id': '1'}]

Как узнать, сколько вложенных дочерних элементов?
Моя попытка:
In [58]: df12 = df11.explode('children')
In [64]: final = pd.concat([df12, pd.json_normalize(df12.children)])
In [72]: final
Out[72]:
event_id display_name form_count repetition_id children forms
0 t1 t1 0 None {'event_id': 't_01', 'display_name': 't(1)', '... []
1 t2 t2 0 None {'event_id': 't_02', 'display_name': 't(2)', '... []
0 t_01 t(1) 1 t1 [] [{'form_id': 'f1', 'form_repetition_id': '1', ...
1 t_02 t(2) 1 t2 [{'event_id': 't_03', 'display_name': 't(3)', ... [{'form_id': 'f2', 'form_repetition_id': '1', ...


Подробнее здесь: https://stackoverflow.com/questions/779 ... s-new-rows
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»