NumPy 和 Pandas 哪个更快?
NumPy和Pandas都是数据科学和机器学习技术必不可少的工具。我们知道,pandas提供类似于SQL表的DataFrames允许您进行表格数据分析,而NumPy非常有效地运行向量和矩阵运算。
pandas提供了一堆C或Cython优化的函数,它们可以比NumPy等效函数更快(例如从文本文件中读取文本)。
如果您想做点积、计算平均值等数学运算,pandasDataFrames通常会比NumPy数组慢。因为熊猫正在做更多的事情,比如对齐标签、处理异构数据等等。
示例
import numpy as np import pandas as pd array = np.arange(100, 200) s = pd.Series(array) print('Series object time: ',end ='') %timeit -n10 -r2 s.mean() print('Numpy array time: ',end ='') %timeit -n10 -r2 np.mean(array)
解释
在这里,我们创建了一个NumPy数组,其中包含100到200的100个值,还使用NumPy数组创建了一个PandasSeries对象。
我们使用内置的IPython魔术函数%timeit来查找每个函数消耗的平均时间。计算每个对象数据的平均值。
-n10用于设置循环次数,-r2用于设置运行次数。
输出结果
Series object: 225 µs ± 83 µs per loop (mean ± std. dev. of 2 runs, 10 loops each) Numpy array: 33.1 µs ± 10.8 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
我们可以看到NumPy数组和Series对象计算均值所用的时间。
示例
import numpy as np import pandas as pd array = np.arange(100, 200) s = pd.Series(array) print('Series object time: ',end ='') %timeit -n10 -r2 s.std() print('Numpy array time: ',end ='') %timeit -n10 -r2 np.std(array)
解释
这里我们验证了NumPy数组和pandasSeries对象计算标准差所用的时间。我们可以在下面的输出块中看到时间戳。
输出结果
Series object time: 443 µs ± 26.6 µs per loop (mean ± std. dev. of 2 runs, 10 loops each) Numpy array time: 104 µs ± 12.1 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
正如我们在上面两个例子中看到的,与NumPy对象相比,pandas消耗的平均时间更多。
与创建NumPy数组相比,创建PandasDataFrame花费的时间大约长6000倍。Pandas需要额外的时间来设置索引标签。