我需要讀取數千個 csv 檔案并將它們作為 Python 中的單個 csv 檔案輸出。
每個原始檔案將用于在最終輸出中創建單行,其中列是對原始檔案行的一些操作。
由于檔案的組合大小,這需要花費數小時來處理,并且也無法完全加載到記憶體中。
我能夠讀取每個 csv 并將其從記憶體中洗掉以解決 RAM 問題。但是,我目前正在迭代地讀取和處理每個 csv(在 Pandas 中)并將輸出行附加到最終的 csv,這似乎很慢。我相信我可以使用多處理庫讓每個行程讀取并處理自己的 csv,但不確定是否有比這更好的方法。
在有 RAM 限制的情況下,在 Python 中完成此任務的最快方法是什么?
例如,ABC.csv 和 DEF.csv 將被讀取并處理為最終輸出 csv 中的單獨行。(實際檔案將有數十列和數十萬行)
ABC.csv:
id,col1,col2
abc,2.3,3
abc,3.7,5
abc,3.0,9
DEF.csv:
id,col1,col2
def,1.9,3
def,2.8,2
def,1.6,1
最終輸出:
id,col1_avg,col2_max
abc,3.0,9
def,2.1,3
uj5u.com熱心網友回復:
我建議使用dask這個。它是一個允許您對大型資料集進行并行處理的庫。
import dask.dataframe as dd
df = dd.read_csv('*.csv')
df = df.groupby('id').agg({'col1': 'mean', 'col2': 'max'})
df.to_csv('output.csv')
代碼說明
dd.read_csv將讀取當前目錄中的所有 csv 檔案并將它們連接到單個資料幀中。
df.groupby('id').agg({'col1': 'mean', 'col2': 'max'})將按id列對資料框進行分組,然后計算每組的平均值col1和最大值col2。
df.to_csv('output.csv')將資料幀寫入 csv 檔案。
表現
我在我的機器上使用一個包含 10,000 個 csv 檔案的目錄進行了測驗,每個檔案有 10,000 行。代碼運行大約需要 2 分鐘。
安裝
要安裝dask,運行pip install dask。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518161.html
