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






df_unnested = df.explode('Additional info')
# Extract the relevant columns
df_final = df_unnested[['id', 'name', 'code', 'date']]
Решение выше не работает.
Вы можете взорвать , преобразовать словари в столбцы с помощью 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: сначала конвертируй в словари с помощью import ast ; df['Additional info'] = df['Additional info'].apply(ast.literal_eval)
Это не дает правильного решения