2014-08-29 25 views
0

我有一段代码,当我有小的CSV数据时工作正常,但当我试图通过它运行大型CSV时出错。实际上,这段代码应该将3个CSV值的数据放入3个单独的字典中,将这些字典组合成一个主字典,然后对字典进行算术运算。输入CSV的外观如下:索引错误:在python中使用numpy时索引超出范围

time A B C D 
    0 3 4 6 4 
.001 4 6 7 8 
.002 4 6 7 3 

我使用的代码是下面显示的代码。错误发生在第47行和第65行,我尝试用字典预演算术。任何解释为什么这是发生的不胜感激。

import numpy 

Xcoord = {} 
time = [] 
with open ('Nodal_QuardnetsX2.csv', 'r') as f: 
    f.readline() # Skips first line 
    for line in f: 
     values = [s.strip()for s in line.split(',')] 
     Xcoord[values[0]] = map(float, values[1:]) 
     time.append(values[0]) 

Ycoord = {} 
with open ('Nodal_QuardnetsY2.csv', 'r') as f: 

    f.readline() # Skips first line 
    for line in f: 
     values = [s.strip()for s in line.split(',')] 
     Ycoord[values[0]] = map(float, values[1:]) 

Zcoord = {} 
with open ('Nodal_QuardnetsZ2.csv', 'r') as f: 
    f.readline() # Skips first line 
    for line in f: 
     values = [s.strip()for s in line.split(',')] 
     Zcoord[values[0]] = map(float, values[1:]) 

# Create a master dictionary of the form {'key':[[x, y, z], [x, y, z]} 
CoordCombo = {} 
for key in Xcoord.keys(): 
    CoordnateList = zip(Xcoord[key], Ycoord[key], Zcoord[key]) 
    CoordCombo[key] = CoordnateList 

counter = 0 
keycount1 = 0 
keycount2 = 0.001 
difference = [] 
NodalDisplacements = {} 

#Find the difference between the x, y, and z quardnets relative to that point in time 
while keycount2 <= float(values[0]): 
     Sub = numpy.subtract(CoordCombo[str(keycount2)][counter], CoordCombo[str(keycount1)][counter])  
     counter = counter + 1 
     difference.append(Sub) 
     NodalDisplacements[keycount1] = Sub 
     keycount1 = keycount1 + 0.001 
     keycount2 = keycount2 + 0.001 

counter = 0 
keycount3 = 0 
keycount4 = 0.001 

Sum = [] 
breakpoint = float(values[0])-0.001 

while keycount4 <= breakpoint: 
    Add = numpy.sum(NodalDisplacements[keycount4][counter], NodalDisplacements[keycount3][counter]) 
    Sum.append(Add) 
    keycount3 = keycount3 + 0.001 
    keycount4 = keycount4 + 0.001 
    counter = counter + 1 
    if counter == 2: 
     counter = 0 
print Sum 

回答

0

可能是您的CSV文件的行不包含5种元素或线是空的。 在你的逻辑中,我会建议使用

for line in f: 
    line = line.strip() 
    if not line: continue 
    if len(values) != N_COLS: continue # or error... 
    # other ...