【发布时间】:2013-11-07 10:54:38
【问题描述】:
下面的代码表明,pandas 可能比 numpy 慢得多,至少在函数 clip() 的特定情况下是这样。令人惊讶的是,从 pandas 到 numpy 再到 pandas 的往返,虽然在 numpy 中执行计算,但仍然比在 pandas 中执行快得多。
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
【问题讨论】:
-
没关系,因为 pandas 在剪辑的基础上进行了大量的数据检查、转换和其他工作
-
当@alko 列举的时候,我也很意外地发现头顶上的所有熊猫。索引是使 pandas 与 numpy 不同的另一个现实。查看Sofia Heisler No More Sad Pandas Optimizing Pandas Code for Speed and Efficiency PyCon 2017 的谈话,了解 pandas 开销的一些评论和后果以及一堆丰富的比较,而不是所有 numpy 与 pandas。但是,引入
.values的示例进行了直接比较。