mah*_*kya 6 python numpy data-analysis python-2.7
我正在尝试使用python中的csv模块处理从csv文件获取的数据.这里有大约50列和401125行.我使用以下代码块将该数据放入列表中
csv_file_object = csv.reader(open(r'some_path\Train.csv','rb'))
header = csv_file_object.next()
data = []
for row in csv_file_object:
data.append(row)
Run Code Online (Sandbox Code Playgroud)
我可以使用len(数据)获取此列表的长度并返回401125.我甚至可以通过调用列表索引来获取每个单独的记录.但是当我尝试通过调用np.size(data)来获取列表的大小时(我将numpy导入为np),我获得了以下堆栈跟踪.
MemoryError Traceback(最近一次调用last)in()----> 1 np.size(data)
C:\ Python27\lib\site-packages \numpy\core\fromnumeric.pyc in size(a,axis)2198返回a.size 2199除AttributeError: - > 2200返回asarray(a).size 2201 else:2202试试:
asarray中的C:\ Python27\lib\site-packages \numpy\core \numeric.pyc(a,dtype,order)233 234""" - > 235返回数组(a,dtype,copy = False,order = order )236 237 def asanyarray(a,dtype = None,order = None):
的MemoryError:
我甚至无法使用列表索引将该列表分成多个部分或将此列表转换为numpy数组.它给出了同样的内存错误.
我该如何处理这种大数据样本.有没有其他方法来处理像这样的大型数据集.
我在Windows 7专业版中使用ipython笔记本.
Dou*_*gal 12
正如@DSM在评论中所指出的,你得到内存错误的原因是调用np.size列表会先将数据复制到数组中,然后获取大小.
如果您不需要将它作为numpy数组使用,请不要调用np.size.如果你确实想要类似numpy的索引选项,那么你有几个选择.
您可以使用pandas,它用于处理大型不一定数值的数据集,并且有一些很好的帮助器和实现的东西.
如果你不想这样做,你可以定义一个numpy 结构数组,并在第一个位置逐行填充它,而不是制作一个列表并复制到它中.就像是:
fields = [('name1', str), ('name2', float), ...]
data = np.zeros((num_rows,), dtype=fields)
csv_file_object = csv.reader(open(r'some_path\Train.csv','rb'))
header = csv_file_object.next()
for i, row in enumerate(csv_file_object):
data[i] = row
Run Code Online (Sandbox Code Playgroud)
您还可以fields基于此进行定义,header因此您不必手动键入所有50个列名称,但您必须为每个列名称指定数据类型.