将API转换为Pandas DataFrame

Lea*_*ava 7 python api python-2.7 pandas

我想将API调用转换为pandas data frame.

目前,API非常无组织,我想整合pandas以便于阅读/编辑/操作.

我尝试过以下方法:

r = requests.get('http://api.football-data.org/v1/competitions/398/teams')
x = r.json()
df = pd.read_json(x)
print df
Run Code Online (Sandbox Code Playgroud)

但收到:

TypeError: Expected String or Unicode
Run Code Online (Sandbox Code Playgroud)

Ris*_*ava 8

pd.read_json期待一个字符串.但是,r.json()返回一个dict对象.

在您的情况下,您应该通过查看来探索返回的JSON对象的结构x.keys().这会产生['count', '_links', 'teams'].您可能对"球队"领域感兴趣.

因此,您应该执行以下操作:

r = requests.get('http://api.football-data.org/v1/competitions/398/teams')
x = r.json()
df = pd.DataFrame(x['teams'])
print df
Run Code Online (Sandbox Code Playgroud)


bma*_*man 6

read_json函数需要一个字符串。您正在提供一个 JSON 对象(使用requests库的json方法解析)。您需要做的是使用方法将对象转换回字符串json.dumps

import json 

r = requests.get('http://api.football-data.org/v1/competitions/398/teams')
x = r.json()
df = pd.read_json(json.dumps(x))
Run Code Online (Sandbox Code Playgroud)

或者更好的是,直接从请求对象获取缓冲区,而不将其转换为对象。

r = requests.get('http://api.football-data.org/v1/competitions/398/teams')
df = pd.read_json(r.text)
Run Code Online (Sandbox Code Playgroud)