使用read_csv时出现内存错误

时间:2016-02-20 16:13:31

标签: csv pandas hdf5 caffe np

我想将csv文件转换为hdf5格式,用于caffe培训。因为csv文件是80G,它会报告内存错误。机器内存是128G。所以它可以改进我的代码?逐个处理?下面是我的代码,它报告了在np.array中运行时的内存错误

if '__main__' == __name__:
        print 'Loading...'  
        day = sys.argv[1]
        file = day+".xls"
        data = pd.read_csv(file, header=None)
        print data.iloc[0,1:5]

        y = np.array(data.iloc[:,0], np.float32)
        x = np.array(data.iloc[:,1:], np.float32)

        patch = 100000

        dirname = "hdf5_" + day 
        os.mkdir(dirname)
        filename = dirname+"/hdf5.txt"
        modelname = dirname+"/data"
        file_w = open(filename, 'w')
        for idx in range(int(math.ceil(y.shape[0]*1.0/patch))):    
                with h5py.File(modelname + str(idx) + '.h5', 'w') as f:
                        d_begin = idx*patch
                        d_end = min(y.shape[0], (idx+1)*patch)
                        f['data'] = x[d_begin:d_end,:]

                         f['label'] = y[d_begin:d_end]

                file_w.write(modelname + str(idx) + '.h5\n')
        file_w.close()

2 个答案:

答案 0 :(得分:0)

最好的方法是读取n行,然后将这些行写入HDF5文件,每次扩展为n个元素。这样,所需的内存量不依赖于csv文件的大小。你也可以一次读一行,但效率会稍差。

以下是应用此过程读取气象站数据的代码: https://github.com/HDFGroup/datacontainer/blob/master/util/ghcn/convert_ghcn.py

答案 1 :(得分:0)

实际上,由于您单独处理大小为100000的块,因此无需将整个CSV加载到一个块中。 chunksize中的read_csv选项完全符合这种情况。

指定chunksize时,read_csv将成为迭代器,返回大小为DataFrames的{​​{1}}。您可以迭代而不是每次切片数组。

减去设置不同变量的所有行,你的代码应该更像这样:

chunksize