我正在尝试将字典列表转换为 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'])
答案 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