Как преобразовать класс в Python в pandas dataframe? - PullRequest
2 голосов
/ 18 июня 2019

Я пытаюсь создать фрейм данных pandas из объекта класса в python.

Объект class является выводом скрипта postman python, который я получил из следующего урока: https://developer.cisco.com/meraki/build/meraki-postman-collection-getting-started/

Я хочу взять вывод этого

print(response.text)

, который дает:

[{"id":578149602163689207,"name":"Axel Network Test"},{"id":578149602163688579,"name":"Your org"},{"id":578149602163688880,"name":"Your org"},{"id":578149602163688885,"name":"Your org"},{"id":578149602163689038,"name":"Tory's Test Lab"},.......

Я хочу поместить это в кадр данных pandas с колонкой и столбцом ID и столбцом имени.

import requests
import pandas as pd

url = "https://api.meraki.com/api/v0/organizations"

headers = {
    'X-Cisco-Meraki-API-Key': "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
    'User-Agent': "PostmanRuntime/7.15.0",
    'Accept': "*/*",
    'Cache-Control': "no-cache",
    'Postman-Token': "7d29cb4e-b022-4954-8fc8-95e5361d15ba,1a3ec8cb-5da8-4983-956d-aab45ed00ca1",
    'accept-encoding': "gzip, deflate",
    'referer': "https://api.meraki.com/api/v0/organizations",
    'Connection': "keep-alive",
    'cache-control': "no-cache"
    }

response = requests.request("GET", url, headers=headers)

Я устал писать

df = pd.DataFrame(response, columns=['id', 'name']) 

, но это вызывает много ошибок.

См. Журнал ошибок: https://pastebin.com/4BKFYng1

Как мне добиться того, что яхотите?

Ответы [ 4 ]

3 голосов
/ 18 июня 2019

Поскольку текст ответа находится в json, вы можете:
1. Преобразовать JSON в DICT.
2. Передать DICT в качестве кадра данных.

#load the json as a dict
data = json.loads(response.text)

df = pd.DataFrame.from_dict(data, orient='index')
df.reset_index(level=0, inplace=True)

Затем вы можете изменить имя столбца или что-нибудь еще.

2 голосов
/ 18 июня 2019

read_json принимает строку JSON или файлоподобный объект JSON.

In [10]: import pandas as pd    

In [11]: df = pd.read_json(response.text)

In [12]: df
Out[12]:
                   id               name
0  578149602163689207  Axel Network Test
1  578149602163688579           Your org
2  578149602163688880           Your org
3  578149602163688885           Your org
4  578149602163689038    Tory's Test Lab
1 голос
/ 18 июня 2019

Попробуйте это:

df = pd.DataFrame.from_dict(response.json())

вместо этого:

df = pd.DataFrame(response, columns=['id', 'name'])

1 голос
/ 18 июня 2019

После получения ответа вам не хватает десериализации ответа json на объект python, так как @ ASHu2 упомянул

import pandas as pd
import json 
data = json.loads(response.text)
df= pd.DataFrame(data=data, columns=["id","name"]) 
#Optional define index
df.set_index('id', inplace=True)
...