python - 将列表转换为 DataFrame 时如何处理错误 "' NoneType' object has no attribute 'keys' "

标签 python python-3.x dataframe web-scraping

尝试从列表创建数据框但出现错误 “‘NoneType’对象没有属性‘keys’”

import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

person = []
position = []
skaterstats = []
person = []
player_id = {}
 for game_id in range(2018020001, 2018020002, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/feed/live'.format(game_id)
    r = requests.get(url)
    game_data = r.json()

for homeaway in ['home','away']:
    player_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('skaters')
    player_id[homeaway] = player_dict

for homeaway in player_id:
    for playerID in player_id[homeaway]:
        play_dict_person = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('players').get('ID' + str(playerID)).get('person')
        play_dict_position = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('players').get('ID' + str(playerID)).get('position')
        play_dict_skaterstats = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('players').get('ID' + str(playerID)).get('stats').get('skaterStats')
        person.append(play_dict_person)
        position.append(play_dict_position)
        skaterstats.append(play_dict_skaterstats)

df_person = pd.DataFrame(person).head()
df_position = pd.DataFrame(position).head()
df_skaterstats = pd.DataFrame(skaterstats).head()

----> 3 df_skaterstats = pd.DataFrame(skaterstats).head() 

AttributeError: 'NoneType' object has no attribute 'keys'

错误只发生在这个DataFrame上,我已经检查过路径应该是正确的。如果需要任何指导,请链接到下面的 API。

这是 API:https://statsapi.web.nhl.com/api/v1/game/2017020002/feed/live

最佳答案

有些玩家没有统计数据,因此他们的 play_dict_skaterstatsNone。您可能需要更换

skaterstats.append(play_dict_skaterstats)

if play_dict_skaterstats: 
    skaterstats.append(play_dict_skaterstats)

跳过这些情况

或者您可能需要为此情况设置默认值,例如

if not play_dict_skaterstats:
    play_dict_skaterstats = {}
    play_dict_skaterstats['timeOnIce'] = None
    play_dict_skaterstats['assists'] = None
    ...
skaterstats.append(play_dict_skaterstats)

关于python - 将列表转换为 DataFrame 时如何处理错误 "' NoneType' object has no attribute 'keys' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007511/

相关文章:

python - 使用 Python gdata 和 oAuth 2 对日历进行身份验证

python - 如果由 QuerySet.as_manager() 创建,则修改 Django Manager get_queryset() 方法

python-3.x - Python 说我只有两个值,需要三个,而已经有三个值

python - 选择特征后打印列/变量名称

python - 分解 Pandas 数据框列

python - 如何使用 scikit-learn 执行多元线性回归?

python - 转换文本 CSV 二进制文件并在 Python 中从中获取随机行,而不将其读入内存

python - 立即处理异步响应

Python 矩阵给出与最后一条记录相同的结果

python - 如何按月汇总和汇总项目?