Pandas DataFrame行遍历加速及np.vectorize用法纠错求助
问题:大列数DataFrame逐行应用含循环函数的提速与np.vectorize用法纠正
我有一个100行(后续行数会增加)、2689列的DataFrame(df),需要对每行应用函数fn1(row,a,b),该函数内部包含无法避免的循环。我尝试了四种方法来提速,但未发现耗时差异:
- 朴素方法:
for i in df.values: # 执行操作
- 使用apply:
df['f']= df.apply(lambda row: fn1(row,a,b), axis=1, raw=True) # 5*2689规模的df耗时1.2
- 直接传入values:
df['f']=fn1(df.values,a,b) # 耗时相同
- 使用np.vectorize:
vectfunc=np.vectorize(fn1) df['f'] = vectfunc(df[df.columns[0:]],a, b) # 或 df['f'] = vectfunc(df,a, b)
第四种方法报错'numpy.float64' object is not iterable,原因是fn1内部会将传入的行转为列表,但当前传入的是单个元素而非整行。
我想寻求提速方案,若当前数据规模太小无法判断差异,至少请纠正第四种方法的用法。另外,我了解到np.vectorize本身不提速,请问能否使用Pandas向量化?
内容的提问来源于stack exchange,提问作者knowledge_seeker
相关产品推荐
相关产品推荐

