pandas分批读取CSV并分批处理数据
算法工程师要面对的一大主要矛盾:不够用的服务器内存和巨大的训练集数据量之间的矛盾。
如果使用pandas处理CSV数据,会先把整个CSV加载到内存之后再处理,所以如果你的CSV文件巨大(其实也不一定非常大,我的数据集只有4、50个G,可惜当时服务器内存只有60多个G了),就要想其他方法了。
我之前都是把CSV文件手动切分成10个小文件,再逐个处理。
现在觉着这方法太傻了啊。
其实pandas 读取CSV文件的函数 read_csv() 中自带两个参数就可以解决:
nrows= skiprows=
其中前者控制本次读取多少行,后者用于控制跳过多少行然后从其下一行开始读。
这样每次就只读取 nrows 行数据加载到内存,先处理这部分数据,处理完之后再去加载下一批。
备注:
如果最后一个分组不够 nrows 的参数值也不会报错,会把剩余部分当做一个分组。比如CSV文件中有5行数据,每次读两行数据,即 nrows=2,最后只剩下一行,就把这一行当做一组。
以上,问题解决~