尝试将字典列表转换为熊猫数据框

时间:2021-01-06 19:40:45

标签: python pandas dataframe python-requests

我正在尝试将字典列表转换为 Pandas 数据框,就像这里的 stackoverflow 帖子中一样,但是无论出于何种原因我都无法让它工作。

Convert list of dictionaries to a pandas DataFrame

当我尝试使用下面的代码执行此操作时,我得到一个 1824 行 × 1 列的数据对象,这是不正确的(我想要 6 列)。

这是我想要在我的 Pandas DataFrame 中的数据对象的快照(从 response.text 返回)

[
{
    "base_attack": 118,
    "base_defense": 111,
    "base_stamina": 128,
    "form": "Fall_2019",
    "pokemon_id": 1,
    "pokemon_name": "Bulbasaur"
},
{
    "base_attack": 118,
    "base_defense": 111,
    "base_stamina": 128,
    "form": "Normal",
    "pokemon_id": 1,
    "pokemon_name": "Bulbasaur"
},
]

这是我的代码(api 密钥是公开的并在示例中使用):

import requests

url = "https://pokemon-go1.p.rapidapi.com/pokemon_stats.json"

headers = {
 'x-rapidapi-key': "4a84fad910msha335a71778de51cp1a79d6jsnafac3cffa115",
 'x-rapidapi-host': "pokemon-go1.p.rapidapi.com"
 }

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

print(response.text)

df = pd.DataFrame(response)

df

我也尝试过这两种方法:

df = pd.DataFrame.from_dict({k: v for d in response.text for k, v in d.items()}, 
                         orient='index', 
                         columns=['pokemon_name', 'form', 'base_attack', 'base_defense', 
                         'base_stamina']).rename_axis('pokemon_id').reset_index()

df = pd.DataFrame(response.text, columns=['base_attack', 'base_defense', 'base_stamina', 
                                'form', 'pokemon_id', 'pokemon_name'])

2 个答案:

答案 0 :(得分:1)

你的 response.text 是一个字符串,而不是 Pandas 期望的字典。如果可用,您应该使用 response.json()

df = pd.DataFrame(response.json(), columns=['base_attack', 'base_defense', 'base_stamina', 
                                'form', 'pokemon_id', 'pokemon_name'])

或者,您可以使用 response.text

json.loads 转换为字典

答案 1 :(得分:1)

问题在于 df = pd.DataFrame(response) 中的响应不是您需要作为参数的正确类型的对象。您需要提供一个字典列表作为参数。您可以解析 response.text