Trying to create a dataframe from a list but get error "'NoneType' object has no attribute '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'
The error occurs occurs only on this DataFrame, I have checked that the path should be correct and all. Link to the API below if it would to any guidance.
This is the API: https://statsapi.web.nhl.com/api/v1/game/2017020002/feed/live
Some players have no statistics, so play_dict_skaterstats
for them is None
. You might need to replace
skaterstats.append(play_dict_skaterstats)
with
if play_dict_skaterstats:
skaterstats.append(play_dict_skaterstats)
to skip these cases
Or you might need to set default values for this case, e.g.
if not play_dict_skaterstats:
play_dict_skaterstats = {}
play_dict_skaterstats['timeOnIce'] = None
play_dict_skaterstats['assists'] = None
...
skaterstats.append(play_dict_skaterstats)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With