Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 非类型';对象没有属性';追加';_Python_Python 2.7_Dataframe_Append - Fatal编程技术网

Python 非类型';对象没有属性';追加';

Python 非类型';对象没有属性';追加';,python,python-2.7,dataframe,append,Python,Python 2.7,Dataframe,Append,我试图创建一个数据框架,其中列提供了一周内所有NFL比赛的统计数据。 然而,在NFL,两支球队被给予了“再见”,这意味着他们不会在那一周比赛,因此没有比赛数据 当我不使用“if game not None”时,它为“hteam=game.home”提供相同的“'NoneType'对象没有属性'home'”,这意味着由于bye,home的数据丢失,但当我使用它时,它仍然给出相同的错误,不过这次是针对附加部分。 我真的不明白为什么,因为附加数据的部分在if语句中。 提前谢谢 我试过缩进,但它并没有真

我试图创建一个数据框架,其中列提供了一周内所有NFL比赛的统计数据。 然而,在NFL,两支球队被给予了“再见”,这意味着他们不会在那一周比赛,因此没有比赛数据 当我不使用“if game not None”时,它为“hteam=game.home”提供相同的“'NoneType'对象没有属性'home'”,这意味着由于bye,home的数据丢失,但当我使用它时,它仍然给出相同的错误,不过这次是针对附加部分。 我真的不明白为什么,因为附加数据的部分在if语句中。 提前谢谢

我试过缩进,但它并没有真正影响到任何东西,并给了我同样的错误

teams= ['KC','NYJ','ATL','BAL','PIT','ARI','JAX','OAK','PHI','IND','SEA','CAR','NYG','NO','MIA','TB','LAC']
df= pd.DataFrame(columns =["Home","Away","Win","hRushYds","hPassYds",
                           'hPuntAvg','hPenYds',"aRushYds","aPassYds",
                           'aPuntAvg','aPenYds',"hScore","aScore"])

def teamStats(h,data):
    w = 0
    game = nflgame.one(2017,1,h,h)
    if game is not None:
        hteam = game.home
        ateam = game.away
        hpass_yds = game.stats_home.passing_yds
        apass_yds = game.stats_away.passing_yds
        hscore = game.score_home
        ascore = game.score_away
        hrush_yds = game.stats_home.rushing_yds
        arush_yds = game.stats_away.rushing_yds
        hpen_yds = game.stats_home.penalty_yds
        apen_yds = game.stats_away.penalty_yds
        hpunt_avg = game.stats_home.punt_avg
        apunt_avg = game.stats_away.punt_avg
        if hteam == game.winner:
            w = 1
        data = data.append({'Home':hteam,'Away':ateam,'Win': w,
                           'hPassYds':hpass_yds,'aPassYds':apass_yds,'hScore': hscore,
                           'aScore':ascore,'hRushYds':hrush_yds,'aRushYds':arush_yds,
                           'hPenYds':hpen_yds,'aPenYds': apen_yds,'hPuntAvg':hpunt_avg,
                           'aPuntAvg': apunt_avg}, ignore_index=True)
        return data

for h in teams:
    df = teamStats(h,df)
df

game
None
时,您不会从
teamstats
返回任何内容。 然后将返回值分配给
df
。 所以现在,
df
可能是
None
(如果
game
是None)。
在团队中h的下一次循环迭代
中,您尝试将此
df
==None
)再次插入
团队统计数据
,在什么时候失败,因为没有
None.append
如果我理解您的代码,您正在尝试迭代
团队
列表,并将他们的统计数据附加到数据帧(如果他们有统计数据要附加)。您正在将数据帧传递给
teamStats
函数,并让它进行追加并返回到新数据帧,您在循环中将其设置为
df

这并不一定是错误的,但我更希望函数返回要追加的数据(如果有数据),并且追加将在外部循环中完成。我认为这会更干净,更不容易出错

考虑到这一点,我会像这样重写您的代码:

teams=[“KC”、“NYJ”、“ATL”、“BAL”、“PIT”、“ARI”、“JAX”、“OAK”,
“PHI”、“IND”、“SEA”、“CAR”、“NYG”、“NO”、“MIA”、“TB”、“LAC”]
df=pd.DataFrame(列=[“主场”、“客场”、“胜利”、“hRushYds”、“hPassYds”,
“hPuntAvg”、“hPenYds”、“aRushYds”、“aPassYds”,
“aPuntAvg”、“aPenYds”、“hScore”、“aScore”])
def团队统计数据(h):
游戏=nflgame.one(2017年1月1日)
如果游戏不是无:
返回{
“家”:游戏。家,
“客场”:比赛,客场,
“赢”:int(game.home==game.winner),#int(True)=1,int(False)=0
“hPassYds”:game.stats\u home.passing\u yds,
“aPassYds”:game.stats\u away.passing\u yds,
“hScore”:游戏。得分,
“aScore”:游戏。在客场得分,
“hRushYds”:game.stats\u home.rushing\u yds,
“aRushYds”:game.stats\u away.rushing\u yds,
“hPenYds”:game.stats\u home.poulding\u yds,
“aPenYds”:game.stats\u away.pould\u yds,
“hPuntAvg”:game.stats\u home.punt\u avg,
“aPuntAvg”:game.stats\u away.punt\u avg,
}
一无所获
对于团队中的h:
统计数据=团队统计数据(h)
如果stats不是None:
df=df.append(stats,ignore_index=True)
df
如您所见,
team_stats
函数返回要追加的数据(如果有数据),循环检查是否需要追加数据。我更喜欢这种方法,因为这样,函数不会更改任何外部数据(函数中未在本地定义的变量或数据结构),因此不太可能出现错误,因为在游戏为
None
的情况下,您忘记了返回
data
(参见kawillzocken的答案)

关于pythonic代码的最后两个注释:

  • 如果函数在特定情况下返回
    None
    ,则应显式写入
    returnnone
    ,即使写入
    return
    或让函数到达其主体的末尾也能获得相同的结果。这样,更清楚的是,您希望返回
    None
    ,这可能有助于您抓住这个错误。在不应返回任何内容的函数(void函数)中使用其他方法
  • 据介绍,在python中,函数名(以及变量)更为传统的书写方式是
    小写字母\u,加上下划线作为空格
    。因此,编写
    team_stats
    比编写
    teamStats
    更为传统。当然这是个人的喜好,但我认为遵守惯例是一个很好的做法