2010-09-30 62 views
3

我有一个python脚本,成功地将csv文件加载到2d numpy数组中,然后根据列成功提取所需单元格的值,行标题值。出于诊断目的,我将脚本打印到数据矩阵的内容中,然后将其放入numpy数组中。当来自底层csv文件的数据包含所有行/列的值时,该脚本可以工作。问题是,当我在csv文件上运行脚本时显示错误,该文件在csv文件末尾显然有几个空行/列。我试图通过在Notepad ++中打开csv文件来解决这个问题,并尽可能多地删除文件末尾的内容。记事本+ +让我删除最后一行,但没有表明有任何空列。在深入研究python打印输出和底层数据结构之间的关系后,我发现python print命令说数组末尾有两个空列。无论如何,编辑csv文件后,我仍然在运行脚本时打印出相同的数据,并且仍然抛出相同的错误,就好像我没有从csv文件末尾删除空行。我检查,我已保存的csv文件,打开和关闭csv文件几次,并关闭并重新打开蟒蛇几次,但错误依然存在:Numpy csv脚本给'ValueError:设置一个序列的数组元素'

这里是我的问题:
如何修改下面的脚本以避免此错误?

这里是我指的是上面的函数:

def GetHSD_alpha(NumberOfColumnMeans,dfResid): 
    dirname=os.path.dirname(os.getcwd()) 
    resources=os.path.join(dirname,'resources') 
    inputfile=os.path.join(resources,'CriticalValuesOfTukeysHSD_a_0_01.csv') 
    separator=',' 
    ColumnIndex=NumberOfColumnMeans 
    RowIndex=dfResid 
    cast = p.cast 
    data = [[] for dummy in xrange(13)] 
    for line in open(inputfile, 'r'): 
     fields = line.strip().split(separator) 
     for i, number in enumerate(fields): 
      data[i].append(number) 

    print 'data HSD alpha is: ',data 
    time.sleep(2) 

    CriticalValuesArray=p.array(data) 
    HSD_alpha_0_01=CriticalValuesArray[ColumnIndex,RowIndex] 

return HSD_alpha_0_01 

另外,作为参考,这里是打印该引发错误的数据的结果的简化版本。注意最后的空元素,在运行脚本之前,我似乎无法手动从我的csv文件中删除:

数据HSD alpha是:[['','5','6','7'] ['2','5.7','5.24','4.95'],['3','6.98','6.33','5.92'],['11','10.48','9.3' '8.55'],[],[]]

同样作为参考,这里是ABBREVIATED版本的打印来自另一个csv文件的数据结果,我将其导入到脚本中用于诊断目的。从下面的打印输出相应的数据不会导致脚本发生错误:
数据HSD alpha是:[['','1','2','3'],['1','4052' ''.49'','34 .12'],['2','4999','99 .01','30.81'],['3','5403','99 .17','29 .46']]

同样,当我在Notepad ++中打开底层csv文件时,似乎没有任何空的列或行,并且我已仔细检查了这些数据文件。

最后,我想象空行/列的数量可能会有所不同,所以任何解决方案都需要能够处理空行/列的变量数量。

预先感谢您。

回答

3

找到了答案。 我需要改变的代码下面一行:

data = [[] for dummy in xrange(11)] 

x范围需要被设置为11,而不是13

简单的答案,但它采取挖了很多。 这个线程现在被应答/完成。

+3

你应该接受你自己的答案来标记问题已完成。 – katrielalex 2010-09-30 23:17:39

0

你为什么要编写自己的csv loader? numpy.loadtxt?或者在你的情况下丢失值: numpy.genfromtxt

相关问题