背景本文内容主要来源于文章ABeginner'sGuidetoOptimizingPandasCodeforSpeed。入门级文章讨论了如何优化pandasdataFrame的处理速度。数据数据准备一一个一个一一个行行行行行行行行行行行:DM1M1M20GBGXR/719871888266.67007448683RkzCzz/8210712267122122760.2930504sWxCNIji/11587120677873106105140.893429一个函数,接收一个Parameters:#这个函数必须能够接收pd.Series或者np.Array中一些简单函数的简单参数soray,Series或者np.Array(v):return(v**2-v)//2+(v**0.5)//2开始测试的目的是使用simple_function处理DataFrame的m1列中的值,生成一个新的m3列。1.最原始的方式,平均7.23s。%%timeitm3=[]df=origin_df.copy(deep=True)foriinrange(0,len(df)):m3.append(simple_function(df.iloc[i]['m1']))df['m3']=m31循环,最好的3:每个循环7.23秒2。使用iterrows,平均3.27s%%timeitm3=[]df=origin_df.copy(deep=True)for_,rowindf.iterrows():m3.append(simple_function(row['m1']))df['m3']=m31循环,最好的3:每个循环3.27秒。使用apply,平均29.5ms%%timeitdf=origin_df.copy(deep=True)df['m3']=df['m1'].apply(simple_function)10个循环,最好的3个:每个循环29.5毫秒4。使用Pandas系列,平均7.88ms%%timeitdf=origin_df.copy(deep=True)df['m3']=simple_function(df['m1'])100个循环,最好的3个:每个循环7.88毫秒5。使用NumPy数组,平均5.31ms%%timeitdf=origin_df.copy(deep=True)df['m3']=simple_function(df['m1'].values)100个循环,最好的3个:每个循环5.31毫秒
