我用了如下三种方法测量pandas列之间相加的效率:1.向量化 2.iterrows迭代 3.先转化成numpy再相加
按道理 向量化处理 肯定要比迭代快啊 为什么实际测下来会慢这么多呢?
df1 = pd.DataFrame({'aaa':{'0':0},
'bbb':{'0':8568}
,'ccc':{'0':1}
,'ddd':{'0':0}})
print(df1)
t = timeit.timeit(stmt="df1['aaa']+df1['bbb']+df1['ccc']+df1['ddd']", setup="from __main__ import df1",number=10000)
print(t)
t = timeit.timeit(stmt="for index,row in df1.iterrows():"
"row['aaa']+row['bbb']+row['ccc']+row['ddd']", setup="from __main__ import df1",number=10000)
print(t)
t = timeit.timeit(stmt="df1['aaa'].values+df1['bbb'].values+df1['ccc'].values+df1['ddd'].values", setup="from __main__ import df1",number=10000)
print(t)
运行结果
aaa bbb ccc ddd
0 0 8568 1 0
2.639297500019893
0.6697011000069324
0.0938532000000123
第一种表示Series相加,不是向量化处理,Series相加,会根据索引进行操作,索引相同则数值相加,肯定会比数值相加慢。
向量其实就是一维数组,Numpy数组操作是最快的。
向量一般是确保安全性的,不最求速度的。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y