2010-09-30 61 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

相關問題