关于python:解析Pandas中大型CSV文件的最快方法

Fastest way to parse large CSV files in Pandas

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

来自csv的每个负载需要几秒钟,然后有更多时间来转换日期。

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

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


正如@chrisb所说,pandas'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

还有一个可能相关的问题:"大数据"工作流程使用大熊猫


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

在相信我在下面写的内容之前,请参阅下面的更新

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

但是,有三件事要尝试:

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

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

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

    更新:我确实相信下面的chrisb,即pandas解析器很快。

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