【发布时间】:2021-12-22 10:35:41
【问题描述】:
在格式化 API 结果以导入 PostgreSQL 数据库的最后一步,我需要一些帮助。数据结构为:
[{ "season": 0,
"seasonType": "string",
"week": 0,
"polls": [
{
"poll": "string",
"ranks": [
{
"rank": 0,
"school": "string",
"conference": "string",
"firstPlaceVotes": 0,
"points": 0 }]}]}]
这是我用来解压它的代码(当然,如果有更好、更有效的方法来做这件事,请大家注意):
year = list(range(2020,2021))
req = []
pbp = pd.DataFrame()
headers = {
"Accept": "application/json",
"Authorization": "Bearer 1a2b3c4d"}
for year in tqdm(year, desc = 'fetch record'):
parameters = {"year":year, "seasonType":"regular"}
req = requests.get("https://api.collegefootballdata.com/rankings", headers=headers, params = parameters)
r = req.json()
print(type(r))
df1 = pd.DataFrame(r, columns = ['season', 'seasonType', 'week'], dtype = int)
pbp = pbp.append(json.loads(req.text))
for polls in pbp["polls"]:
try:
p1 = polls[1]
except IndexError:
continue
df2 = pd.DataFrame.from_dict(p1)
poll = df2["poll"]
y = df1.append(poll)
for rank in df2["ranks"]:
df3 = pd.DataFrame(rank, index=[0])
z = y.append(df3)
当我追加时,数据是这样出来的:
| year | season | week | poll | rank | team |
|---|---|---|---|---|---|
| 2020 | regular | 1 | |||
| 2020 | regular | 2 | |||
| AP | |||||
| 1 | Alabama | ||||
| 2020 | regular | 1 | |||
| 2020 | regular | 2 | |||
| AP | |||||
| 2 | Clemson |
而且,我希望它看起来像这样:
| year | season | week | poll | rank | team |
|---|---|---|---|---|---|
| 2020 | regular | 1 | AP | 1 | Alabama |
| 2020 | regular | 1 | AP | 2 | Clemson |
| 2020 | regular | 2 | AP | 1 | Alabama |
| 2020 | regular | 2 | AP | 2 | Clemson |
【问题讨论】:
-
可能首先使用
print()来查看变量中的内容以及执行了哪一行代码。看来您必须以不同的方式编写代码,首先获取行中的所有值,然后附加到数据帧。但是你首先只附加year season week,然后只附加poll,然后你只附加rank- 这就是你的问题。
标签: python json pandas dataframe append