Numpy Genfromtxt 比 pandas read_csv 慢

Posted

技术标签:

【中文标题】Numpy Genfromtxt 比 pandas read_csv 慢【英文标题】:Numpy Genfromtxt slower than pandas read_csv 【发布时间】:2014-02-24 13:18:39 【问题描述】:

我正在加载一个 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 内存使用量波动更大、更高,并且一旦加载,内存使用量就会显着增加。 (numpy 为 2.49 GB,pandas 为 ~600MB)pandas 中的所有数据类型都是 8 个字节,因此不同的 dtypes 没有区别。我的内存使用量几乎没有达到极限,因此不能将时间差归因于分页。

这种差异有什么原因吗? genfromtxt 效率低吗? (并且泄漏了一堆内存?)

编辑:

numpy 版本 1.8.0

熊猫版本 0.13.0-111-ge29c8e8

【问题讨论】:

基本上,是的。 genfromtxt 只是效率较低。这并不是说它泄漏了内存,只是它本质上读取了 python 列表中的所有内容,然后转换为一个 numpy 数组。 pandas.read_csv 效率更高。不要插入我自己的答案,但请参见此处:***.com/questions/8956832/… 以比较各种 numpy 文本加载方法。 (该答案故意将pandas.read_csv 排除在外,但其性能与上一个示例相似。) 如果真的是这样的话,也许我会看看我能做些什么来向 numpy 提交补丁。就目前而言,加载 DataFrame 后跟 df.as_matrix() 总共需要 15 秒,而 genfromtxt 需要 102 秒 感谢您指出您的其他问题,这是信息丰富的。 这是 Wes 在 read_csv 上的原始文章,作者:wesmckinney.com/blog/?p=543 @JoeKington 也许您可以发布您的 cmets 作为答案... 【参考方案1】: Numpy 模块中的

'genfromtxt' 运行两个主循环。第一个将文件中的所有行转换为字符串,然后另一个循环将每个字符串转换为它们的数据类型。但是你在 'genfromtxt' 中获得了比 loadtxt 和 read_csv 等其他命令更大的灵活性。

【讨论】:

以上是关于Numpy Genfromtxt 比 pandas read_csv 慢的主要内容,如果未能解决你的问题,请参考以下文章

Data Analysis with Pandas 1

浅析Numpy.genfromtxt及File I/O讲解

Numpy函数学习--genfromtxt函数

NumPy之:使用genfromtxt导入数据

Python练手,numpy.genfromtxt

numpy.genfromtxt:不明确的分隔符?