繁体   English   中英

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

[英]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 解析器。

不过,有三件事可以尝试:

  1. Python csv包和csv.reader
  2. NumPy genfromtext
  3. Numpy loadtxt

如果您可以将它与您的数据一起使用,第三个可能是最快的。 同时,它具有最有限的功能集。 (这实际上可能会使其更快。)

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

尝试不同的选择! 如果它们不起作用,那么您将不得不用编译语言(编译的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM