国内最专业的IT技术学习网

UI设计

当前位置:主页 > 亚博2018体育博彩 >

Pandas循环提速7万多倍!Python数据分析攻略

发布时间:2019/09/02标签:   数据    点击量:

原标题:Pandas循环提速7万多倍!Python数据分析攻略
本文经AI新媒体量子位(大众号ID:QbitAI)受权转载,转载请接洽出处。用Python和Pandas停止数据剖析,很快就会用到轮回。但在这此中,就算是较小的DataFrame,应用尺度轮回也比拟耗时。碰到较大的DataFrame时,须要的时光会更长,会让人愈加头疼。当初,有人忍不了了。他是一名来自德国的数据剖析师,名叫Benedikt Droste。他说,当本人花了泰半个小时等候代码履行的时间,决议查找速率更快的替换计划。在给出的替换计划中,应用Numpy向量化,与应用尺度轮回比拟,速率晋升了71803倍。Pandas循环提速7万多倍!Python数据分析攻略他是怎样完成的?咱们一同来看看~尺度轮回处置3年足球赛数据:20.7秒DataFrame是存在行和列的Pandas工具。假如应用轮回,须要遍历全部工具。Python不能应用任何内置函数,并且速率很慢。在Benedikt Droste的供给的示例中,是一个包括65列和1140行的Dataframe,包括了2016-2019赛季的足球赛成果。须要处理的成绩是:创立一个新的列,用于唆使某个特定的队能否打了平手。能够如许开端:defsoc_loop(leaguedf,TEAM,):leaguedf['Draws']=99999forrowinrange(0,len(leaguedf)):if((leaguedf['HomeTeam'].iloc[row]==TEAM)&(leaguedf['FTR'].iloc[row]=='D'))|\((leaguedf['AwayTeam'].iloc[row]==TEAM)&(leaguedf['FTR'].iloc[row]=='D')):leaguedf['Draws'].iloc[row]='Draw'elif((leaguedf['HomeTeam'].iloc[row]==TEAM)&(leaguedf['FTR'].iloc[row]!='D'))|\((leaguedf['AwayTeam'].iloc[row]==TEAM)&(leaguedf['FTR'].iloc[row]!='D')):leaguedf['Draws'].iloc[row]='No_Draw'else:leaguedf['Draws'].iloc[row]='No_Game'Pandas循环提速7万多倍!Python数据分析攻略在这个案例中是阿森纳,在完成目的之前要确认阿森纳加入了哪些场竞赛,是客队仍是主队。但应用尺度轮回十分慢,履行时光为20.7秒。那末,怎样才干更无效率?Pandas 内置函数: iterrows ()ー快321倍在第一个示例中,轮回遍历了全部DataFrame。iterrows()为每一行前往一个Series,它以索引对的情势遍历DataFrame,以Series的情势遍历感兴致的列。这使得它比尺度轮回更快:defsoc_iter(TEAM,home,away,ftr):#team,row['HomeTeam'],row['AwayTeam'],row['FTR']if[((home==TEAM)&(ftr=='D'))|((away==TEAM)&(ftr=='D'))]:result='Draw'elif[((home==TEAM)&(ftr!='D'))|((away==TEAM)&(ftr!='D'))]:result='No_Draw'else:result='No_Game'returnresultPandas循环提速7万多倍!Python数据分析攻略代码运转时光为68毫秒,比尺度轮回快321倍。然而,很多人倡议不要应用它,由于依然有更快的选项,并且iterrows()不能跨行保留dtype。这象征着,假如你在DataFrame dtypes上应用iterrows(),能够变动它,但这会招致许多成绩。必定要保留dtypes的话,你还能够应用itertuples()。这里咱们不具体探讨 ,你能够在这里找到民间文件:

版权信息Copyright ? IT技术教程 版权所有??? ICP备案编号:鲁ICP备09013610号