python - Python 错误 - “数组索引过多”
问题描述
我有一个用于读取一个文件并保存到矩阵的代码。但我想读取几个文件并将其保存到一个矩阵中。但是当我尝试扩展我的代码以使用多个文件时,我收到以下错误消息“数组索引过多”,我只读取一个文件时没有得到
我尝试使用函数而不是 for 循环,并且还尝试以不同方式应用索引(如 StackOverflow 上的其他一些线程所示),但它没有用。
正是这部分代码无法正常工作:
r=r[1:lengthOfDataset,1:numberOfColumns]
我的完整代码:
dataPath = ['ABB-2018-03-26-2019-03-26.csv',
'ALFA-2018-03-26-2019-03-26.csv',
'ALIV-SDB-2018-03-26-2019-03-26.csv',...]
lengthOfDataset=252
numberOfColumns=10
data=np.zeros([len(dataPath),lengthOfDataset-1,numberOfColumns-1])
for i in range(len(dataPath)):
data[i]=readAndConvertFile(dataPath[i])
def readAndConvertFile(F):
with open(F, 'r') as f:
reader = csv.reader(f, delimiter=';')
lists = list(reader)
r = np.array(lists)
r=r[1:lengthOfDataset,1:numberOfColumns]
for j in range(lengthOfDataset-1):
for k in range(numberOfColumns-1):
r[j,k]=num(r[j,k])
return r
def num(s):
try:
s=s.replace(',','.')
s=float(s)
return s
except ValueError:
return 0
解决方案
如果你从一个只包含一个元素的列表中创建一个 numpy 数组,你会得到一个形状为 (,1) (只有一维)的数组,而如果列表中有更多元素,你会得到一个形状像(文件数,1)(二维)。我建议在r
创建 numpy 数组后对其进行整形。
np.reshape(r,(-1,1))
这样可以确保r
始终具有两个维度,而无需指定行数。
推荐阅读
- python - 如何解决“证书已过期”错误代码
- javascript - Dropzone 在处理队列之前检查文件名是否存在
- c# - 使用 .net sdk 在 Azure 数据工厂 V2 中重新运行活动
- python - Pygame Python速成课程项目符号未触发第253页属性错误:“AlienInvasion”对象没有属性“settingsbullets_allowed”
- javascript - 如何在javascript中将数据附加到txt?
- azure-devops - AzureDevop 发布管道不运行程序测试
- java - 如何将令牌保存在数据库中
- sparql - 返回图中没有 rdf:type 的 rdfs:Class 或 rdf:Property 的节点
- amazon-web-services - Keycloak Fargate 部署问题
- javascript - Emscripten - 嵌入导出的函数不会从 Javascript 同步运行。使用异步