Как преобразовать такую ​​структуру из API в python Dataframe - PullRequest
0 голосов
/ 03 мая 2020

У меня есть этот результат от API, но я не могу преобразовать эту структуру в python pandas кадр данных.

Ответ от API

response = {'lists': [{'id': '0d4348d3a7', 'name': 'list one'}, {'id': '5e3e22ae7b', 'name': 'list two'}], 'total_items ': 2}

Попробуйте один

df = pd.DataFrame(response)
print(df)
                                                   lists  total_items
    0  {'id': '0d4348d3a7', 'name': 'list one'            2
    1  {'id': '5e3e22ae7b', 'name': 'list two...          2

Не совсем то, что я хочу.

Попробуйте два

df = json.loads(response)
print(df)

Raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not dict

Спасибо

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Вы достаточно близки, просто не передавайте весь ответ json сам по себе, а только то значение, которое вам требуется:

>>> import pandas as pd
>>> response = {'lists': [{'id': '0d4348d3a7', 'name': 'list one'}, {'id': '5e3e22ae7b', 'name': 'list two'}], 'total_items': 2}
>>> df = pd.DataFrame(response["lists"])
>>> df
           id      name
0  0d4348d3a7  list one
1  5e3e22ae7b  list two
0 голосов
/ 03 мая 2020

Возможно, вы сможете использовать библиотеку json:

#!/usr/bin/env python

import json
a = json.loads('{"lists": [{"id": "0d4348d3a7", "name": "list one"}, {"id": "5e3e22ae7b", "name": "list two"}], "total_items": 2}')
print(a['lists'])

Однако ваш ответ API должен быть отформатирован JSON, если вы используете декодер JSON, иначе вы вызовете json.decoder.JSONDecodeError исключение. То, что вы опубликовали, не JSON и вызовет это исключение: я отредактировал ваш ответный текст, чтобы получить его для декодирования.

Если вам нужен pandas фрейм данных:

#!/usr/bin/env python

import json
import pandas as pd
a = json.loads('{"lists": [{"id": "0d4348d3a7", "name": "list one"}, {"id": "5e3e22ae7b", "name": "list two"}], "total_items": 2}')
df = pd.DataFrame(data=a['lists'])
print(df)
'''
           id      name
0  0d4348d3a7  list one
1  5e3e22ae7b  list two
'''
0 голосов
/ 03 мая 2020

Что вы подразумеваете под Dataframe? Вы имеете в виду pandas фрейм данных ?

Ваш ответ API выглядит для меня JSON, поэтому json должен выполнять вашу работу:

import json
response = "{'lists': [{'id': '0d4348d3a7', 'name': 'list one'}, {'id': '5e3e22ae7b', 'name': 'list two'}], 'total_items': 2}"
dataframe = json.loads(response)

загружает стенды для загрузки из строки, проверьте python описание пакета для получения дополнительных методов и деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...