簡體   English   中英

在Python中加載和隨機隨機播放8 GB的CSV數據

[英]Load and random shuffle 8 gigabytes of csv data in Python

本質上,我有8 GB的CSV數據,我想隨機對其進行混洗,以便可以在ML模型中進行小批量處理。 但是,如果我將8gb的數據直接加載到Python中並對其進行混洗,則似乎存在內存問題。

但是,如果我逐塊加載數據然后對其進行隨機排序,那么由於數據最初是按順序排序的,因此數據仍處於相同的模式。 到目前為止,這是我所做的。

import pandas as pd
import numpy as np

// get data with size equal to CHUNK_SIZE
reader = pd.read_csv(path , header=0, iterator=True)
data = reader.get_chunk(CHUNK_SIZE)

// randomly shuffle
data = np.random.shuffle(data)

有什么方法可以快速有效地做到這一點? 謝謝。

更新:我大約有30,000,000行,並且已按時間對其進行了排序。

這是一個概念...

使用Perl生成30,000,000行CSV-在Mac上需要11秒:

perl -E 'for($i=0;$i<30000000;$i++){say "Line $i,field2,field3,",int rand 100}' > BigBoy.csv

樣本輸出

Line 0,field2,field3,49
Line 1,field2,field3,6
Line 2,field2,field3,15
...
Line 29999998,field2,field3,79
Line 29999999,field2,field3,19

占用1%的行並對其進行洗牌-花費3秒和15MB的RAM:

awk 'rand()>0.99' BigBoy.csv | gshuf > RandomSet.csv

RandomSet.csv包含299,748行:

樣本輸出

Line 15348259,field2,field3,95
Line 1642442,field2,field3,93
Line 29199452,field2,field3,52

在Mac上使用homebrew安裝的gshuf

brew install coreutils

暫無
暫無

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

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