ValueError:数组必须都具有相同的长度,json链接

时间:2019-10-29 06:39:36

标签: python json pandas

import pandas as pd

url = 'https://site.web.api.espn.com/apis/common/v3/sports/basketball/nba/statistics/byathlete?region=us&lang=en&contentorigin=espn&isqualified=true&page=2&limit=50&sort=offensive.avgPoints%3Adesc'
df = pd.read_json(url)

我一直在尝试将此链接导出到JSON,但出现此错误:

 ValueError: arrays must all be same length

点击this link后可以看到数据集。

1 个答案:

答案 0 :(得分:0)

主要问题是,JSON并未完全填充每个项目,因此每个项目可以具有不同的长度。

您可以通过仅提取您感兴趣的功能来解决问题。例如:

# imports
import pandas as pd
import requests

# constants
URL = 'https://site.web.api.espn.com/apis/common/v3/sports/basketball/nba/statistics/byathlete?region=us&lang=en&contentorigin=espn&isqualified=true&page=2&limit=50&sort=offensive.avgPoints%3Adesc'

# save data to JSON
r = requests.get(URL)
data = r.json()

# extract only some features
df = pd.DataFrame(
    [
        {
            'id': item['athlete']['id'],
            'uid': item['athlete']['uid'],
            'firstName': item['athlete']['firstName'],
            'lastName': item['athlete']['lastName'],
        } 
        for item in data['athletes']
    ]
)

# print result
print(df.head())
        id                  uid firstName lastName
0  3133601  s:40~l:46~a:3133601  Devonte'   Graham
1  3112335  s:40~l:46~a:3112335    Nikola    Jokic
2  3133628  s:40~l:46~a:3133628     Myles   Turner
3  3917376  s:40~l:46~a:3917376    Jaylen    Brown
4  4277811  s:40~l:46~a:4277811    Collin   Sexton