我试图将一堆信息同化为一个可用的数组,如下所示:
for (dirpath, dirnames, filenames) in walk('E:/Machin Lerning/Econ/full_set'):
ndata.extend(filenames)
for i in ndata:
currfile = open('E:/Machin Lerning/Econ/full_set/' + str(i),'r')
rawdata.append(currfile.read().splitlines())
currfile.close()
rawdata = numpy.array(rawdata)
for order,file in enumerate(rawdata[:10]):
for i in rawdata[order]:
r = i.split(',')
pdata.append(r)
fdata.append(pdata)
pdata = []
fdata = numpy.array(fdata)
plt.figure(1)
plt.plot(fdata[:,1,3])
编辑:使用前10个txt文件后打印ftada.shape
for order,file in enumerate(rawdata[:10]):
我看到它是(10,500,7)。但如果我不限制这个的大小,而是说
for order,file in enumerate(rawdata):
然后fdata.shape就是(447,) 似乎每当我将rawdata数组中的元素数量增加到13以上时就会发生这种情况...它也不是任何特定位置 - 我将其更改为
for order,file in enumerate(rawdata[11:24):
并且工作正常。 aaaaahhh 如果它有用:这里是文本文件的样本:
20080225,A,31.42,31.79,31.2,31.5,30575
20080225,AA,36.64,38.95,36.48,38.85,225008
20080225,AAPL,118.59,120.17,116.664,119.74,448847
答案 0 :(得分:2)
看起来fdata
是一个数组,错误在fdata[:,1,3]
。这会尝试使用3个索引(切片,1和3)对fdata
进行索引。但如果fdata
是2d数组,则会产生此错误 - too many indices
。
当您获得“索引”时错误,找出有问题的数组的shape
。不要猜。添加调试语句print(fdata.shape)
。
===================
将您的文件样本作为行列表:
In [822]: txt=b"""20080225,A,31.42,31.79,31.2,31.5,30575
...: 20080225,AA,36.64,38.95,36.48,38.85,225008
...: 20080225,AAPL,118.59,120.17,116.664,119.74,448847 """
In [823]: txt=txt.splitlines()
In [826]: fdata=[]
In [827]: pdata=[]
阅读一个文件':
In [828]: for i in txt:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
...:
...:
In [829]: fdata
Out[829]:
[[[b'20080225', b'A', b'31.42', b'31.79', b'31.2', b'31.5', b'30575 '],
....]]]
In [830]: np.array(fdata)
Out[830]:
array([[[b'20080225', b'A', b'31.42', b'31.79', b'31.2', b'31.5',
b'30575 '],
...]]],
dtype='|S8')
In [831]: _.shape
Out[831]: (1, 3, 7)
阅读相同的文件"
In [832]: for i in txt:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
In [833]: len(fdata)
Out[833]: 2
In [834]: np.array(fdata).shape
Out[834]: (2, 6, 7)
In [835]: np.array(fdata).dtype
Out[835]: dtype('S8')
注意dtype - 一个包含8个字符的字符串。由于每行的值是一个字符串,它不能将整个事物转换为数字。
现在阅读略有不同的文件' (少一行,少一行)
In [836]: txt1=b"""20080225,A,31.42,31.79,31.2,31.5,30575
...: 20080225,AA,36.64,38.95,36.48,38.85 """
In [837]: txt1=txt1.splitlines()
In [838]: for i in txt1:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
In [839]: len(fdata)
Out[839]: 3
In [840]: np.array(fdata).shape
Out[840]: (3, 8)
In [841]: np.array(fdata).dtype
Out[841]: dtype('O')
现在让我们添加一个空的'文件 - 没有行,因此pdata
为[]
In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
数组形状和dtype完全改变了。它不能再从行创建一个统一的3d数组。
10个文件后的形状(10,500,7)表示10个文件,每行500行,每行7列。但是400个文件中的一个或多个文件是不同的。我的最后一次迭代表明一个是空的。