![](/img/trans.png)
[英]Fastest way to read large files text files in Pandas Dataframe
[英]Fastest way to parse large CSV files in Pandas
我正在使用熊猫来分析这里的大型数据文件: http ://www.nielda.co.uk/betfair/data/ 它们的大小约为 100 兆。
每次从 csv 加载需要几秒钟,然后更多时间来转换日期。
我尝试加载文件,将日期从字符串转换为日期时间,然后将它们重新保存为泡菜文件。 但是加载这些也需要几秒钟。
我可以使用哪些快速方法从磁盘加载/保存数据?
正如@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-考虑
还有一个可能相关的其他问题: 使用熊猫的“大数据”工作流程
要检查的一件事是磁盘系统本身的实际性能。 特别是如果您使用旋转磁盘(不是 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 性能的限制。
Modin 是加州大学伯克利分校 RISELab 的一个早期项目,旨在促进分布式计算在数据科学中的使用。 它是一个多进程 Dataframe 库,具有与 Pandas 相同的 API,允许用户加快他们的 Pandas 工作流程。 Modin 在 8 核机器上将 Pandas 查询速度提高了 4 倍,只需要用户更改笔记本中的一行代码。
pip install modin
如果使用 dask
pip install modin[dask]
通过键入导入 modin
import modin.pandas as pd
它使用所有 CPU 内核来导入 csv 文件,它几乎就像熊猫一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.