numpy和csv读取器出现Python内存错误
我正在阅读两个大的csv文件,每个文件有315000行和300列。我本来希望在使用python时阅读所有这些内容,但现在遇到大约50000行的内存问题。我有大约4GB的RAM,每个csv文件都是1.5G。我本来打算试试亚马逊的网络服务,但如果有人对阅读文件的优化技术有什么建议,我很想省钱 此处前2/314000行的示例数据: 我在Python(xy)Spyder控制台中遇到以下错误:numpy和csv读取器出现Python内存错误,python,arrays,csv,numpy,Python,Arrays,Csv,Numpy,我正在阅读两个大的csv文件,每个文件有315000行和300列。我本来希望在使用python时阅读所有这些内容,但现在遇到大约50000行的内存问题。我有大约4GB的RAM,每个csv文件都是1.5G。我本来打算试试亚马逊的网络服务,但如果有人对阅读文件的优化技术有什么建议,我很想省钱 此处前2/314000行的示例数据: 我在Python(xy)Spyder控制台中遇到以下错误: for row in getstuff(filename): (line 97) for row in get
for row in getstuff(filename): (line 97)
for row in getdata("test.csv"): (line 89)
MemoryError
我还尝试按照评论建议执行以下操作,但仍然收到一个内存错误:
for row in getdata("train.csv"):
data.append(row[0::])
np.array(data)
代码如下:
import csv
from xlrd import open_workbook
from xlutils.copy import copy
import numpy as np
import time
from sklearn.ensemble import RandomForestClassifier
from numpy import savetxt
from sklearn.feature_extraction import DictVectorizer
from xlwt import *
t0=time.clock()
data=[]
data1=[]
count=0
print "Initializing..."
def getstuff(filename):
with open(filename, "rb") as csvfile:
datareader = csv.reader(csvfile)
count = 0
for row in datareader:
if count<100000:
yield row
count += 1
elif count > 100000:
return
else:
return
def getdata(filename):
for row in getstuff(filename):
yield row
for row in getdata("train.csv"):
np.array(data.append(row[0::]))
for row in getdata("test.csv"):
np.array(data1.append(row[0::]))
target = np.array([x[1] for x in data],dtype=object)
train = np.array([x[2:] for x in data],dtype=object)
test = np.array([x[1:] for x in data1],dtype=object)
导入csv
从xlrd导入打开的\u工作簿
从xlutils.copy导入复制
将numpy作为np导入
导入时间
从sklearn.employ导入随机林分类器
从numpy导入savetxt
从sklearn.feature\u提取导入DictVectorizer
从xlwt导入*
t0=时间。时钟()
数据=[]
数据1=[]
计数=0
打印“正在初始化…”
def getstuff(文件名):
打开(文件名为“rb”)作为csvfile时:
datareader=csv.reader(csvfile)
计数=0
对于datareader中的行:
如果计算100000:
返回
其他:
返回
def getdata(文件名):
对于getstuff中的行(文件名):
产量行
对于getdata中的行(“train.csv”):
数组(data.append(行[0::]))
对于getdata中的行(“test.csv”):
数组(data1.append(行[0::]))
target=np.array([x[1]表示数据中的x],dtype=object)
train=np.array([x[2:]表示数据中的x],dtype=object)
test=np.array([x[1:]表示数据1中的x],dtype=object)
您不使用numpy.genfromtxt
读取csv的任何原因?通过编写np.array(data.append())
,它可能不会将数据
转换为np.array
。也许您可以尝试在循环外转换数据
一次。Rumbalski先生,谢谢您的回复。我最初尝试了genfromtxt,遇到了类似的问题,但将再次尝试。seb,我尝试在for循环之外转换为np.array(数据),并再次收到内存错误。您的数据是数字吗?