Могу ли я превратить столбец Pandas Dataframe, содержащий строку jJSON, в дополнительные столбцы и строки?

Я столкнулся со странной проблемой с API, к которому обращаюсь. Я получаю свои данные в формате JSON со строкой, содержащей JSON внутри. Вместо того, чтобы быть вложенным, по какой-то причине оно выглядит как строковое поле внутри JSON. Я дошел до того, что могу изменить этот исходный JSON на фрейм данных Pandas, который можно увидеть ниже, но мне нужно в конечном итоге поместить его в таблицу в базе данных SQL, но JSON, с которым я работаю, значительно длиннее, чем образец, с которым я работаю здесь, и в результате JSON обрезается из-за максимального размера varchar, с которым я могу работать в SQL.

По сути, есть ли у меня какой-либо способ работать с этим фреймом данных в Python, чтобы преобразовать JSON в дополнительные столбцы и строки в фрейме данных?

Это Dataframe, с которым я сейчас работаю:

Отделение Ценить JSON 1 А [{"employeeID":123,"name":"Дженни"}, {"employeeID":456,"name":"Майк"}, {"employeeID":789,"name":"Рики"}] 2 Б [{"employeeID":735, "name":"Тодд", "badgeNo":84639}, {"employeeID":223,"name":"Грег", "badgeNo":93649}] 3 С [] 4 Д [{"employeeID":947,"name":"Карди"}, {"employeeID":284,"name":"Том"}]

Я пытаюсь, чтобы мой Dataframe выглядел так

Отделение Ценить идентификатор сотрудника имя значокНет 1 А 123 Дженни 1 А 456 Майк 1 А 789 Рикки 2 Б 735 Тодд 84639 2 Б 223 Грег 93649 3 С 4 Д 947 Карди 4 Д 284 Том

Любая помощь приветствуется

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если значения в столбце 'json' являются строками, сначала преобразуйте их в JSON с помощью json.loads.

Затем вы можете explode преобразовать значения в новые столбцы для каждого объекта JSON и использовать json_normalize для преобразования их в фреймы данных.

Наконец, concat (на axis=1) исходный фрейм данных минус столбец 'json' + вновь созданный фрейм данных.

df["json"] = df["json"].apply(json.loads)
df = df.explode("json").reset_index(drop=True)
out = pd.concat([df.drop(columns = "json"), pd.json_normalize(df["json"])], axis=1)
   Department Value  employeeID   name  badgeNo
0           1     A       123.0  Jenny      NaN
1           1     A       456.0   Mike      NaN
2           1     A       789.0  Ricky      NaN
3           2     B       735.0   Todd  84639.0
4           2     B       223.0   Greg  93649.0
5           3     C         NaN    NaN      NaN
6           4     D       947.0  Cardi      NaN
7           4     D       284.0    Tom      NaN

это работает очень хорошо, спасибо! Я отметил это как ответ. У меня есть несвязанный вопрос относительно json, по какой-то причине я использую «вместо», но я считаю, что этот вопрос уже был задан и на него уже дан ответ, и я могу объединить это решение с этим кодом, чтобы полностью решить мою проблему. Еще раз спасибо!

Jwest 22.07.2024 21:26

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

Похожие вопросы