Python列表的限制?

Python列表的限制?,python,list,numpy,Python,List,Numpy,我试图将一组信息吸收到一个可用数组中,如下所示: 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(

我试图将一组信息吸收到一个可用数组中,如下所示:

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]):
我看是(10500,7)。但是如果我不限制这个的大小,而是说

for order,file in enumerate(rawdata):
那么fdata.shape就是(447,) 似乎每当我将在rawdata数组中查看的元素数增加到13个以上时,就会发生这种情况。。。它也不是任何特定的位置-我把它改为

for order,file in enumerate(rawdata[11:24):
这很有效。aaaaahh 如果有用:下面是文本文件的示例:

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]
中。它尝试使用切片、1和3这三个索引索引
fdata
。但如果
fdata
是2d数组,则会产生此错误-
索引过多

当出现“索引”错误时,请找出有问题数组的
形状。不要只是猜测。添加调试语句
打印(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)
读取“相同的文件”

注意数据类型-一个8个字符的字符串。因为每行的on值是一个字符串,所以它不能将整个内容转换为数字

现在读一个稍微不同的“文件”(少一行,少一个值)

现在让我们添加一个“空”文件-没有行,因此
pdata
[]

In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
阵列形状和数据类型已完全更改。它无法再从线条创建统一的三维阵列


10个文件(10500,7)后的形状表示10个文件,每行500行,每行7列。但完整的400个文件中有一个或多个是不同的。我上一次迭代表明其中一个是空的。

看起来像是
fdata
是一个数组,错误在
fdata[:,1,3]
。尝试使用切片、1和3这三个索引对
fdata
进行索引。但如果
fdata
是二维数组,则会产生此错误-
索引过多

当出现“索引”错误时,请找出有问题数组的
形状
。不要只是猜测。添加调试语句
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)
读取“相同的文件”

请注意数据类型-一个由8个字符组成的字符串。因为每行的on值是一个字符串,所以它不能将整个内容转换为数字

现在读一个稍微不同的“文件”(少一行,少一个值)

现在让我们添加一个“空”文件-没有行,因此
pdata
[]

In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
数组形状和数据类型已完全更改。它无法再从直线创建统一的三维阵列


10个文件后的形状(10500,7)表示10个文件,每行500行,每行7列。但完整的400个文件中的一个或多个是不同的。我的上一次迭代表明其中一个是空的。

该错误通常意味着您试图将二维数组视为三维数组。它与数组中的元素数无关。我怀疑您的问题与您如何编写最后一行有关,而不是与代码中的任何其他内容有关。您的代码和异常不匹配(代码中没有
print
len
)。它看起来不像你在执行你认为你是的代码。也许Anaconda存在缓存问题。该错误通常意味着您试图将二维数组视为三维数组。它与数组中的元素数无关。我怀疑您的问题与您如何编写最后一行有关,而不是与代码中的任何其他内容有关。您的代码和异常不匹配(代码中没有
print
len
)。它看起来不像你在执行你认为你是的代码。也许Anaconda存在缓存问题。数组的形状似乎随大小而变化?我不明白!还要检查数据类型。你的一个或多个文件有不同的布局。重要的不是总数;这是文件内容。看到我的模拟文件读取。感谢您的解释!但问题是。指定rawdata[0:26]的范围将返回(26,)的维度。但如果我用rawdata[0,13]或[13,26]尝试它,它将返回三维数组:[13500,7]。那它怎么可能是一个特定的文件呢?我看不懂你的文件!跨
13
的范围如何?或者尝试
fdata.append(np.array(pdata))
。这样可以更容易地检查每个文件生成的形状和数据类型
np.stack(fdata,axis=0)
可用于连接末端的所有数组。数组的形状似乎随大小而变化?我不明白!还要检查数据类型。你的一个或多个文件有不同的布局。重要的不是总数;这是文件内容。看到我的模拟文件读取。感谢您的解释!但问题是。指定rawdata[0:26]的范围将返回(26,)的维度。但如果我用rawdata[0,13]或[13,26]尝试它,它将返回三维数组:[13500,7]。那它怎么可能是一个特定的文件呢?我看不懂你的文件!跨
13
的范围如何?或者尝试
fdata.append(np.array(pdata))
。这样可以更容易地检查每个文件生成的形状和数据类型
np.stack(fdata,axis=0)
可用于连接末端的所有阵列。