[英]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 中。 也許在這種情況下它們是相同的,但我的目標是按時間而不是資源進行優化。
更新
根據到目前為止的評論,這里有一些關於數據和我的最終目標的額外細節。
由於我們在這里將時間作為衡量標准,因此您的 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.