Python熊猫性能
问题描述:
有人告诉你,如果你在Python中循环,你做错了什么,我倾向于同意这一点,所以我做了一些perf。分析我的程序,我对结果感到惊讶:Python熊猫性能
我试图用dropna()检索熊猫系列非Nan数据的索引,它似乎比循环更慢:
from pandas import Series
import numpy as np
import timeit
def test1():
s = Series([25.9,25.8,np.nan,34.8],index=['a','b','c','d'])
return s.dropna().index
def test2():
s = Series([25.9,25.8,np.nan,34.8],index=['a','b','c','d'])
res = []
for i in s.index:
if not np.isnan(s[i]):
res.append(i)
return res
>>> timeit.timeit(test1,number=10000)
1.931797840017623
>>> timeit.timeit(test2,number=10000)
1.602180508842423
我失去了一些东西在这里?或者这只是因为我返回一个数组而不是熊猫索引?
在此先感谢
答
这些都是非常小系列。试着用一个较大:
In [11]: s = pd.Series([25.9,25.8,np.nan,34.8] * 1000)
In [12]: %timeit [i for i in s.index if not np.isnan(s[i])]
10 loops, best of 3: 34.9 ms per loop
In [13]: %timeit s.dropna().index
10000 loops, best of 3: 106 µs per loop
注:我用一个列表理解,这可能比你IMPL稍快。
+0
有道理,非常感谢! – deubNippon
尽管大熊猫不同意,熊猫不是一切的答案。总是选择最适合这项工作的工具,不要相信任何人说“图书馆XYZ是最好的”或“如果你是Xing,你做错了什么”。在引擎盖下,你的图书馆又是X'ing。 – Hyperboreus