繁体   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