簡體   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