Преобразование вложенного json на три уровня в фрейм данныхPython

Программы на Python
Ответить
Anonymous
 Преобразование вложенного json на три уровня в фрейм данных

Сообщение Anonymous »

У меня есть json трехуровневой глубины.
Я хочу преобразовать его в фрейм данных с пятью столбцами.



id
имя
код
уровень
parent_id



Итак:
Часть, с которой я борюсь, заключается в том, что я могу извлечь каждый вложенный элемент, но не могу найти элегантный способ сохранить «parent_id». Должны быть более элегантные способы сделать это. Любые подсказки приветствуются.
source = response.json()
print ('there are ' + str(len(source)) + ' records')

df_L1 = df
df_L2 = json_normalize(df_L1['subLevelCategories'][0])
df_L3 = json_normalize(df_L2['subLevelCategories'][0]) #store for later !!!!!

df_L2_wrapper = df_L2['id']
df_L3_wrapper = df_L3['id']
df_L2_wrapper.name = 'parent_id'
df_L3_wrapper.name = 'parent_id'

df_L1 = df_L1.head(5)
df_L2 = df_L2.head(5)
df_L3 = df_L3.head(5)
df_L3_wrapper = df_L3_wrapper.head(5)
df_L2_wrapper = df_L2_wrapper.head(5)

# Build of df_L1
df_L1 = df_L1.drop(['subLevelCategories'], axis=1)
df_L1['parentid']=0

# Build of df_L2
df_L2 = df_L2.drop(['name','code','level'], axis=1)

# Rename the Series
df_L2 = json_normalize(df_L2['subLevelCategories'][0])
# Concatenate the DataFrame and the renamed Series
df_L2 = pd.concat([df_L2, df_L2_wrapper], axis=1)
df_L2 = df_L2.drop(['subLevelCategories'], axis=1)
# ////// L2 is built.

# Build of df_L3
df_L3 = df_L3.drop(['subLevelCategories'], axis=1)
df_L3 = pd.concat([df_L3, df_L3_wrapper], axis=1)

df_combined = pd.concat([df_L1, df_L2, df_L3], ignore_index=True)

РЕДАКТИРОВАТЬ: Образец был исправлен путем заключения его в разделы '[' и ']'.
источник взят из
response = requests.get(url, headers=headers)
source = response.json()

Пример JSON выглядит следующим образом:
[
{
"id": 3372,
"name": "Archive",
"code": null,
"level": 1,
"subLevelCategories": [
{
"id": 16708,
"name": ".....",
"code": null,
"level": 2,
"subLevelCategories": [
{
"id": 16727,
"name": ".........",
"code": null,
"level": 3,
"subLevelCategories": null
},
{
"id": 16726,
"name": "........",
"code": null,
"level": 3,
"subLevelCategories": null
}
]
},
{
"id": 16701,
"name": ".......",
"code": null,
"level": 2,
"subLevelCategories": [
{
"id": 16782,
"name": "......",
"code": null,
"level": 3,
"subLevelCategories": null
},
{
"id": 16785,
"name": "......",
"code": null,
"level": 3,
"subLevelCategories": null
}
]
}
]
}
]


Подробнее здесь: https://stackoverflow.com/questions/792 ... -dataframe
Ответить

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

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

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

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

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