用Python和Pandas进行数据分析,很快就会用到循环。
但在这其中,就算是较小的DataFrame,使用标准循环也比较耗时。
遇到较大的DataFrame时,需要的时间会更长,会让人更加头疼。
现在,有人忍不了了。他是一位来自德国的数据分析师,名叫Benedikt Droste。
他说,当自己花了大半个小时等待代码执行的时候,决定寻找速度更快的替代方案。
在给出的替代方案中,使用Numpy向量化,与使用标准循环相比,速度提升了71803倍。
他是怎么实现的?我们一起来看看~
标准循环处理3年足球赛数据:20.7秒
DataFrame是具有行和列的Pandas对象。如果使用循环,需要遍历整个对象。
Python不能利用任何内置函数,而且速度很慢。在Benedikt Droste的提供的示例中,是一个包含65列和1140行的Dataframe,包含了2016-2019赛季的足球赛结果。
需要解决的问题是:创建一个新的列,用于指示某个特定的队是否打了平局。可以这样开始:
def soc_loop(leaguedf,TEAM,):
leaguedf['Draws'] = 99999
for row in range(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]