使用读取csv时出现内存错误

使用读取csv时出现内存错误,csv,pandas,hdf5,caffe,np,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, he

我想将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()

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

下面是应用此过程读取气象站数据的代码:
实际上,由于您单独处理大小为100000的块,因此不需要一次加载整个CSV。
read\u csv
中的
chunksize
选项正适合这种情况

指定
chunksize
时,
read\u csv
将成为迭代器,返回大小为
chunksize
DataFrames
。您可以迭代而不是每次切片数组

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

chuncks = pd.read_csv(file, header=None, chunksize=100000)

for chunk_number, data in enumerate(chunks):
    y = np.array(data.iloc[:,0], np.float32)
    x = np.array(data.iloc[:,1:], np.float32)

    file_w = open(filename, 'w')
    with h5py.File(modelname + str(idx) + '.h5', 'w') as f:
        f['data'] = x
        f['label'] = y
        file_w.write(modelname + str(chunk_number) + '.h5\n')
    file_w.close()