将列表转换为DataFrame时如何处理错误“'NoneType'对象没有属性'keys'”

Posted

技术标签:

【中文标题】将列表转换为DataFrame时如何处理错误“\'NoneType\'对象没有属性\'keys\'”【英文标题】:How to handle Error "'NoneType' object has no attribute 'keys'", when converting list to DataFrame将列表转换为DataFrame时如何处理错误“'NoneType'对象没有属性'keys'” 【发布时间】:2019-05-29 04:05:14 【问题描述】:

尝试从列表中创建数据框但出现错误 "'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

【问题讨论】:

【参考方案1】:

有些玩家没有统计数据,所以play_dict_skaterstats对他们来说是None。您可能需要更换

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)

【讨论】:

优秀的解决方案!再次感谢先生。安德森,你真是个巫师!

以上是关于将列表转换为DataFrame时如何处理错误“'NoneType'对象没有属性'keys'”的主要内容,如果未能解决你的问题,请参考以下文章

处理包/模块中的错误时如何处理Python异常

执行 Flux.map() 时如何处理错误

在 python 中进行迭代时如何处理日期时间的 NaT 值?

找不到人脸时如何处理 deepFace.analyze() 中的错误?

使用选项卡活动和片段时如何处理后按

使用to_csv时如何处理pandas内存错误?