使用读取csv时出现内存错误
我想将csv文件转换为hdf5格式,用于caffe培训。由于csv文件为80G,它将报告内存错误。机器内存为128G。因此,是否有可能改进我的代码?逐个处理?下面是我的代码,在np.array中运行时报告内存错误使用读取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
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()