繁体   English   中英

限制在Python列表上?

[英]Limits on Python Lists?

我正在尝试将大量信息同化为可用数组,如下所示:

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  

看起来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个文件中的一个或多个是不同的。 我的最后一次迭代建议一个是空的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM