Преобразовать вложенный словарь в DataFrame Pandas в представление столбца - PullRequest
0 голосов
/ 11 мая 2018

Я получил данные ответа в Python, используя библиотеку requests, и преобразовал их в json, используя функцию .json(). Затем использовали функцию .json_normalize() для получения вывода в чистом формате DataFrame.

Но вот в чем проблема: значения в одном из моих вложенных словарей (dict in dict) выглядят так:

   ID   Sec Type
    0   20  [{'id': '3233790e-1f47-403a-bb97-58a14a2f92ab', 'values': [{'number':50, 'level':1}]}]
    1   30  [{'id': 'bbc9852c-ac76-4ecd-9afb-dd371f3bd48b', 'values': [{'number':40, 'level':2}]}]
    2   40  [{'id': 'be5629e0-458d-4aaa-b2f8-77d8ad1b0f7f', 'values': [{'number':30, 'level':3}]}]

Честно говоря, я не сталкивался с подобными ситуациями и немного запутался. Есть ли какие-либо опции в Pandas для отображения этих данных обычным способом столбцов, или мне нужно создать что-то с помощью цикла for, чтобы анализировать их строка за строкой.

1 Ответ

0 голосов
/ 11 мая 2018

Да, вы можете использовать лямбду для извлечения данных в столбцы:

data = [
[0,   20,  [{'id': '3233790e-1f47-403a-bb97-58a14a2f92ab', 'values': [{'number':50, 'level':1}]}]],
[1,   30,  [{'id': 'bbc9852c-ac76-4ecd-9afb-dd371f3bd48b', 'values': [{'number':40, 'level':2}]}]],
[2,   40,  [{'id': 'be5629e0-458d-4aaa-b2f8-77d8ad1b0f7f', 'values': [{'number':30, 'level':3}]}]],
        ]

data = pd.DataFrame(data, columns = ['id', 'sec', 'type'])
data = data.set_index('id')
data['sec_id'] = data.loc[:, 'type'].apply(lambda x: x[0]['id'])
data['number'] = data.loc[:, 'type'].apply(lambda x: x[0]['values'][0]['number'])
data['level'] = data.loc[:, 'type'].apply(lambda x: x[0]['values'][0]['level'])
data = data.drop('type',axis=1)
print(data)

вывод:

    sec                                sec_id  number  level
id                                                          
0    20  3233790e-1f47-403a-bb97-58a14a2f92ab      50      1
1    30  bbc9852c-ac76-4ecd-9afb-dd371f3bd48b      40      2
2    40  be5629e0-458d-4aaa-b2f8-77d8ad1b0f7f      30      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...