我是python的新手,并且一直在尝试从excel文件中读取数据集并将其存储在数组/列表中。
我正在使用“openpyxl”来处理excel文档,因此存在一些非标准语法,但是,所有这些似乎都有效,我相信问题在于二维数组位。
这可能是一个非常基本的菜鸟错误,但是因为我习惯于在C ++中工作,所以我很难搞清楚它!
(为了清楚起见,我已经包含了打印声明,因为这是我尝试进行故障排除的方式)
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import math as mth
import scipy as science
from array import array
from openpyxl import load_workbook
wb2 = load_workbook(r'C:"path and file name"')
ws1 = wb2.active
timeArray = [None]*630
voltageArray = [[None]*25,[None]*630]
i=0
j=0
for i in range (0, 625):
j=0
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j][i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j][i])
准确打印出来;
0 0
-30
1 0
-29
到目前为止,哪些是正确的数字,但此时它失败并给出以下错误;
IndexError Traceback (most recent call last)
<ipython-input-9-fa1751a1a2f2> in <module>()
20 timeArray[i] = ws1.cell(row = i+1, column = 4).value
21 for j in range (0, 15):
---> 22 voltageArray[j][i] =(ws1.cell(row = i+1, column=j+5).value)
23 print(j, i)
24 print(voltageArray[j][i])
IndexError: list index out of range
电子表格中没有任何内容可以导致这一点,因为下一个单元格都已填充并且格式与前两个格式完全相同。
我认为我设置或使用二维数组“voltageArray”的方式有问题
我已经从类似问题的答案中尝试了几个修复,但未能使它们中的任何一个工作。
非常感谢任何帮助!
答案 0 :(得分:0)
您正在导入numpy
,所以您不妨使用它:)
对于这种类型的使用,Numpy数组更加高效和通用*
问题是你没有以你期望的形状创建voltageArray
,你实际上将它初始化为两个列表的列表,第一个内部列表的长度为25,第二个内部列表的长度为630.您实际上需要一个形状为(2D,630)的2D数组。
timeArray = np.zeros(625) # Array of 625 zeros
voltageArray = np.zeros((25, 630)) # Array of zeros of shape (25,630)
for i in range(0, 625):
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j, i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j, i])
当你不知道他们将会变得多大或者他们将包含什么对象时, * List
是好的。但是在这里,你知道形状和内容,所以使用numpy.array
是件好事。