Numpy CSV脚本出现“ValueError: setting an array element with a sequence”错误。

3
我有一个Python脚本,可以成功地将CSV文件加载到2D NumPy数组中,并成功提取所需单元格的值,该单元格是基于其列和行标题值确定的。为了诊断目的,我让脚本在将数据矩阵放入NumPy数组之前打印出其内容。当底层CSV文件的数据包含所有行/列的值时,该脚本可以正常工作。问题在于,如果我在空白行/列的CSV文件上运行脚本,则会引发错误。我尝试通过在Notepad++中打开CSV文件并从文件末尾删除尽可能多的内容来解决这个问题。Notepad++只允许我删除一行,但没有指示有任何空列。经过对Python打印输出和底层数据结构之间关系的更深入检查,我看到Python打印命令显示数组末尾有两个空列。无论如何,在编辑CSV文件后,当我运行脚本时,我仍然得到相同的数据打印输出,并且它仍然引发相同的错误,就好像我没有从CSV文件末尾删除空行一样。我检查了是否保存了CSV文件,打开和关闭了CSV文件几次,并关闭并重新打开了Python几次,但错误仍然存在。
我的问题是: 如何修改下面的脚本以避免此错误?
这是我上面提到的函数:
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

此外,供参考,这是打印出导致错误的数据的缩写版本。请注意末尾的空元素,我无法在运行脚本之前手动删除它们:
数据 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'],[],[]]
另外,供参考,这是从另一个csv文件中导入脚本进行诊断目的的数据的缩写版本。下面打印输出对应的数据没有导致脚本抛出错误:
数据 HSD alpha 为:[['','1','2','3'],['1','4052','98.49','34.12'],['2','4999','99.01','30.81'],['3','5403','99.17','29.46']]
同样,当我在Notepad++中打开底层csv文件时,似乎没有任何空列或行,并且我已经仔细检查了这些数据文件。
最后,我想象一下,空行/列的数量可能会有所变化,因此任何解决方案都需要能够处理可变数量的空行/列。
提前感谢。
2个回答

3
找到了答案。 我需要更改以下代码行:
data = [[] for dummy in xrange(11)]

xrange需要设置为11而不是13。

简单的答案,但需要大量挖掘。 这个线程已经得到解答/完成。


0

为什么要编写自己的CSV加载器? numpy.loadtxt?或者在您的情况下使用缺失值: numpy.genfromtxt


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接