下面的代码表明,pandas可能比numpy慢得多,至少在函数clip()的特定情况下如此。令人惊讶的是,从熊猫到numpy和回到熊猫的往返,同时在numpy中进行计算,仍然比在熊猫中做得快得多。
pandas功能不应该以这种迂回的方式实现吗?
In [49]: arr = np.random.randn(1000, 1000)
In [50]: df=pd.DataFrame(arr)
In [51]: %timeit np.clip(arr, 0, None)
100 loops, best of 3: 8.18 ms per loop
In [52]: %timeit df.clip_lower(0)
1 loops, best of 3: 344 ms per loop
In [53]: %timeit pd.DataFrame(np.clip(df.values, 0, None))
100 loops, best of 3: 8.4 ms per loop
答案 0 :(得分:11)
在master / 0.13(很快发布)中,速度要快得多(由于对齐/ dtype / nans的处理,仍然比原生numpy稍慢)。
在0.12中它每列应用,所以这是一个相对昂贵的操作。
In [4]: arr = np.random.randn(1000, 1000)
In [5]: df=pd.DataFrame(arr)
In [6]: %timeit np.clip(arr, 0, None)
100 loops, best of 3: 6.62 ms per loop
In [7]: %timeit df.clip_lower(0)
100 loops, best of 3: 12.9 ms per loop