Python熊猫性能

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 

我失去了一些东西在这里?或者这只是因为我返回一个数组而不是熊猫索引?

在此先感谢

+1

尽管大熊猫不同意,熊猫不是一切的答案。总是选择最适合这项工作的工具,不要相信任何人说“图书馆XYZ是最好的”或“如果你是Xing,你做错了什么”。在引擎盖下,你的图书馆又是X'ing。 – Hyperboreus

这些都是非常系列。试着用一个较大:

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