在Pandas中解析大型CSV文件的最快方法

时间:2014-08-26 14:34:36

标签: python pandas

我正在使用pandas来分析大数据文件:http://www.nielda.co.uk/betfair/data/它们的大小约为100兆。

来自csv的每次加载都需要几秒钟,然后需要更多时间来转换日期。

我尝试加载文件,将日期从字符串转换为日期时间,然后将它们重新保存为pickle文件。但加载它们也需要几秒钟。

我可以使用哪些快速方法从磁盘加载/保存数据?

3 个答案:

答案 0 :(得分:18)

正如@chrisb所说,熊猫' read_csv可能比csv.reader/numpy.genfromtxt/loadtxt更快。我不认为你会找到更好的解析csv的东西(作为一个注释,read_csv不是一个纯粹的python解决方案,因为CSV解析器是用C语言实现的)。

但是,如果您必须经常加载/查询数据,解决方案是仅解析CSV一次,然后以另一种格式存储,例如HDF5。您可以使用pandas(背景为PyTables)来有效地查询(docs)。
请参阅此处,了解HDF5,csv和SQL与pandas的io性能:http://pandas.pydata.org/pandas-docs/stable/io.html#performance-considerations

还有一个可能相关的问题:"Large data" work flows using pandas

答案 1 :(得分:4)

要检查的一件事是磁盘系统本身的实际性能。特别是如果您使用旋转磁盘(而不是SSD),您的实际磁盘读取速度可能是性能的解释因素之一。因此,在进行过多优化之前,请检查是否将相同的数据读入内存(例如,mydata = open('myfile.txt').read())需要相等的时间。 (只要确保你没有被磁盘缓存所困扰;如果你加载相同的数据两次,第二次它会快得多,因为数据已经在RAM缓存中了。)

在相信我在

下面写下的内容之前,请参阅下面的更新

如果您的问题确实是解析文件,那么我不确定是否有任何纯Python解决方案可以帮助您。如您所知,文件的实际结构,您不需要使用通用的CSV解析器。

但有三件事要尝试:

  1. Python csv包和csv.reader
  2. NumPy genfromtext
  3. Numpy loadtxt
  4. 如果你可以将它与数据一起使用,第三个可能是最快的。同时它具有最有限的功能集。 (这实际上可以使它快速。)

    此外,crclaytonBKayEdChum在评论中给出的建议也很好。

    尝试不同的选择!如果它们不起作用,那么你将不得不用编译语言编写一些东西(编译Python或者例如C)。

    更新:我确实相信chrisb下面提到的内容,即pandas解析器速度很快。

    然后,使解析更快的唯一方法是用C(或其他编译语言)编写特定于应用程序的解析器。 CSV文件的通用解析并不简单,但如果知道文件的确切结构,则可能存在快捷方式。在任何情况下,解析文本文件都很慢,所以如果你能把它翻译成更可口的东西(HDF5,NumPy数组),加载只会受到I / O性能的限制。

答案 2 :(得分:0)

Modin是加州大学伯克利分校RISELab的早期项目,旨在促进将分布式计算用于数据科学。它是一个多进程数据库框架,具有与pandas相同的API,允许用户加快其pandas工作流程。 Modin在8核计算机上将Pandas查询速度提高了4倍,只需要用户在笔记本中更改一行代码即可。

pip install modin

如果使用dask

pip install modin[dask]

通过键入

导入modin
import modin.pandas as pd

它使用所有CPU内核导入csv文件,几乎就像熊猫一样。