簡體   English   中英

在 Pandas Dataframe 中讀取大文件文本文件的最快方法

[英]Fastest way to read large files text files in Pandas Dataframe

我有幾個大文件(每個 > 4 GB)。 其中一些是固定寬度格式,一些是 pipe 分隔的。 這些文件既有數字數據又有文本數據。 目前我正在使用以下方法:

df1 = pd.read_fwf(fwFileName, widths = [2, 3, 5, 2, 16], 
                 names = columnNames, dtype = columnTypes,
                 skiprows = 1, engine = 'c', 
                 keep_default_na = False)
df2 = pd.read_csv(pdFileName, sep = '|', names = columnNames, 
                 dtype = columnTypes, useCols = colNumbers, 
                 skiprows = 1, engine = 'c', 
                 keep_default_na = False)

但是,這似乎比 R 的 read_fwf(來自 readr)和 fread(來自 data.table)慢。 我可以使用其他一些有助於加快讀取這些文件的方法嗎?

我正在使用具有多個內核的大型服務器,因此 memory 不是問題。 我可以安全地將整個文件加載到 memory 中。 也許在這種情況下它們是相同的,但我的目標是按時間而不是資源進行優化。

更新

根據到目前為止的評論,這里有一些關於數據和我的最終目標的額外細節。

  • 這些文件被壓縮(固定寬度是 zip 和 pipe 分隔是 gzip)。 因此,我不確定像 Dask 這樣的東西是否會增加加載的價值。 他們會嗎?
  • 加載這些文件后,我計划將計算成本高的 function 應用於數據組。 因此,我需要全部數據。 雖然數據是按組排序的,即前 x 行是第 1 組,接下來的 y 行是第 2 組,依此類推。 因此,即時組建小組可能更有效率? 有沒有一種有效的方法來做到這一點,因為我不知道每個組有多少行?

由於我們在這里將時間作為衡量標准,因此您的 memory 大小不是我們應該關注的主要因素,實際上相反,所有使用延遲加載的方法(更少 memory 並且僅在需要時加載對象)比加載快得多memory 中的所有數據一次,您可以查看dask ,因為它提供了這樣的惰性讀取 function。 https://dask.org/

start_time = time.time() 
data = dask.dataframe.read_csv('rg.csv') 
duration = time.time() - start_time
print(f"Time taken {duration} seconds") # less than a second

但是正如我所說,這不會在 memory 中加載數據,而是在需要時僅加載部分數據,但是您可以使用以下方法完全加載它:

data.compute()

如果您想在 memory 中更快地加載內容,那么您需要在您的服務器中具有良好的計算能力,可以從這些能力中受益的一個很好的候選人是ParaText https://github.com/wiseio/paratext您可以將 ParaText 與 readcsv 進行基准測試使用以下代碼:

import time
import paratext
start_time = time.time() 
df = paratext.load_csv_to_pandas("rg.csv") 
duration = time.time() - start_time
print(f"Time taken {duration} seconds")   
import time
import pandas as pd
start_time = time.time() 
df = pd.read_csv("rg.csv") 
duration = time.time() - start_time
print(f"Time taken {duration} seconds")   

請注意,如果您沒有足夠的計算能力來支持paraText ,結果可能會更糟。 您可以在此處查看ParaText加載大文件的基准https://deads.gitbooks.io/paratext-bench/content/results_csv_throughput.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM