我正在加载一个CSV文件(如果您需要特定的文件,它是来自http://www.kaggle.com/c/loan-default-prediction的训练csv)。使用numpy加载CSV比pandas慢得多。
timeit("genfromtxt('train_v2.csv', delimiter=',')", "from numpy import genfromtxt", number=1)
102.46608114242554
timeit("pandas.io.parsers.read_csv('train_v2.csv')", "import pandas", number=1)
13.833590984344482
我还要提一下,numpy的内存使用量波动更大,更高,并且在加载后具有显着更高的内存使用量(2.49 GB对比pandas的约600MB)。 pandas中的所有数据类型都是8字节,因此不同的dtype并不是区别所在。我远未达到最大内存使用量,因此时间差异不能归因于分页。
这种差异有任何原因吗? genfromtxt效率低下吗? (并且泄漏了大量内存?)
编辑:
numpy版本1.8.0 pandas版本0.13.0-111-ge29c8e8
genfromtxt
效率较低,并非存在内存泄漏问题,只是它实质上是将所有数据读入 Python 列表,然后再转换为 NumPy 数组。相比之下,pandas.read_csv
更加高效。不想自夸,但可以在这里参考一下:https://dev59.com/nGox5IYBdhLWcg3wzXel#8964779,该网址比较了几种加载文本文件的 NumPy 方法(该回答有意地没有涉及pandas.read_csv
, 但它的性能与最后一个示例类似)。 - Joe Kingtondf.as_matrix()
总共需要约 15 秒,而 genfromtxt 则需要 102 秒。 - Kurt Spindler