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 慢的主要内容,如果未能解决你的问题,请参考以下文章