我正在使用pandas来分析大数据文件:http://www.nielda.co.uk/betfair/data/它们的大小约为100兆。
来自csv的每次加载都需要几秒钟,然后需要更多时间来转换日期。
我尝试加载文件,将日期从字符串转换为日期时间,然后将它们重新保存为pickle文件。但加载它们也需要几秒钟。
我可以使用哪些快速方法从磁盘加载/保存数据?
答案 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解析器。
但有三件事要尝试:
csv
包和csv.reader
genfromtext
loadtxt
如果你可以将它与数据一起使用,第三个可能是最快的。同时它具有最有限的功能集。 (这实际上可以使它快速。)
此外,crclayton
,BKay
和EdChum
在评论中给出的建议也很好。
尝试不同的选择!如果它们不起作用,那么你将不得不用编译语言编写一些东西(编译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]
通过键入
导入modinimport modin.pandas as pd
它使用所有CPU内核导入csv文件,几乎就像熊猫一样。