Как разложить список словарей в столбце dataframe

У меня есть фрейм данных, df, как показано ниже.

идентификатор имя код дата Дополнительная информация 01 рубашка xyz123 2022-01-01 [{'имя': 'телефон', 'код': 'ph123'}, {'имя': 'машина', 'код': 'cx2022'}, {}] 02 велосипед бк001 2022-12-10 [{}, {}, {}] 03 телефон ph987 2023-02-10 [{'имя': 'рубашка', 'код': 'xyz456'}]

Я хотел бы отключить столбец дополнительной информации и назначенные значения каждого json в столбцах имени и кода соответственно. Ожидаемый результат показан ниже. Новые добавленные строки выделены полужирным шрифтом после того, как столбец дополнительной информации не вложен. В окончательном выводе столбец дополнительной информации удален.

Ожидаемый вывод DataFrame:

идентификатор имя код дата 01 рубашка xyz123 2022-01-01 01 телефон ph123 2022-01-01 01 машина cx2022 2022-01-01 02 велосипед бк001 2022-12-10 03 телефон ph987 2023-02-10 03 рубашка xyz456 2023-02-10

Может ли кто-нибудь помочь мне решить эту задачу? Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Отмените вложение столбца «Дополнительная информация», разбейте столбец на соответствующие строки.

df_unnested = df.explode('Additional info')

# Extract the relevant columns
df_final = df_unnested[['id', 'name', 'code', 'date']]

Это не дает правильного решения

Himanshu Panwar 14.06.2023 13:20

Решение выше не работает.

Peter 14.06.2023 13:37
Ответ принят как подходящий

Вы можете взорвать , преобразовать словари в столбцы с помощью json_normalize , затем присоединиться и объединить к исходному DataFrame:

s = df['Additional info'].explode()

out = pd.concat([df[['id', 'name', 'code', 'date']], 
                 df[['id', 'date']].join(pd.json_normalize(s)
                                           .set_axis(s.index).dropna(),
                                         how='inner')
                ]).sort_index(kind='stable')

Вариант, который требует только знать столбец для удаления:

cols = 'Additional info'

s = df[cols].explode()
tmp = df.drop(columns=col)

out = pd.concat([tmp, 
                 pd.json_normalize(s)
                   .set_axis(s.index).dropna()
                   .combine_first(tmp)
                ]).drop_duplicates().sort_index(kind='stable')

Выход:

   id   name    code        date
0   1  shirt  xyz123  2022-01-01
0   1  phone   ph123  2022-01-01
0   1    car  cx2022  2022-01-01
1   2   bike   bk001  2022-12-10
2   3  phone   ph987  2023-02-10
2   3  shirt  xyz456  2023-02-10

Привет. Если тип значения в «Дополнительной информации» — строка, как мне удалить столбец?

Peter 14.06.2023 13:48

@Peter: сначала конвертируй в словари с помощью import ast ; df['Additional info'] = df['Additional info'].apply(ast.literal_eval)

mozway 14.06.2023 13:54

Другие вопросы по теме