2013-01-31 62 views
0

因此,我編寫了一個小測試代碼來計算文件夾中所有csv文件的平均值。Numpy - ValueError:無法設置序列的數組元素

parser = argparse.ArgumentParser(description='avg data from csv to csv') 
parser.add_argument('--input', required = True) 
parser.add_argument('--output', required = True) 
args = parser.parse_args() 

# Get command arguments 
input_files_path = args.input 
output = args.output 

avg = [] 
for infile in glob.glob(input_files_path+"*.csv"): 
     a = np.loadtxt(infile, delimiter=",") 
     mean = np.mean(a, axis=0) 
     avg.append((mean)) 
     print infile 
np.savetxt(output,(avg), fmt = "%.1f", delimiter=", ") 

但現在的問題,當我試圖保存文件的名稱,以及在CSV文件是這樣的:

parser = argparse.ArgumentParser(description='avg data from csv to csv') 
parser.add_argument('--input', required = True) 
parser.add_argument('--output', required = True) 
args = parser.parse_args() 

# Get command arguments 
input_files_path = args.input 
output = args.output 

avg = [] 
for infile in glob.glob(input_files_path+"*.csv"): 
     a = np.loadtxt(infile, delimiter=",") 
     mean = np.mean(a, axis=0) 
     avg.append((infile,(mean))) 
     print infile 
np.savetxt(output,(avg), fmt = "%.1f", delimiter=", ") 

它拋出一個錯誤:

np.savetxt(output,(avg), fmt = "%.1f", delimiter=", ") 
    File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 963, in savetxt 
    X = np.asarray(X) 
    File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 235, in asarray 
    return array(a, dtype, copy=False, order=order) 
ValueError: cannot set an array element with a sequence 

我似乎不明白問題是什麼。也許這是因爲我試圖將一個字符串附加到一個浮點數?我檢查fmt在numpy ..但我沒有發現任何有趣的事情。

/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py:773: UserWarning: loadtxt: Empty input file: "../robalo-31.1/op.csv" 
    warnings.warn('loadtxt: Empty input file: "%s"' % fname) 
/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py:2374: RuntimeWarning: invalid value encountered in double_scalars 
    return mean(axis, dtype, out) 
+0

我不看行平均' .append((infile,(mean)))'代碼中的任何地方。你能否澄清一下如何適合這個? – mgilson

+0

已發佈。還有什麼我失蹤的? 編輯後添加@mgilson – pistal

+0

感謝您的更新。我猜測它與'savetxt'中的'format'部分有關 - 基本上你會告訴numpy將所有東西都保存爲float,但是你的數據中有字符串。我可以想象,當numpy嘗試將列表轉換爲ndarray時,可能會搞亂'dtype'參數。我可以推薦您使用'np.savetxt',而不是使用'csv'模塊來保存輸出文件嗎? – mgilson

回答

1

我猜你的格式字符有問題np.savetxt。 (你有一個字符串浮動元組,而你的分隔符意味着你只使用浮動元素)。我建議csv此相反:

>>> import csv 
>>> import StringIO 
>>> g = StringIO.StringIO() 
>>> writer = csv.writer(g,delimiter=',') #this is the part that is applicable 
>>> writer.writerows(lst) 
>>> g.seek(0) 
>>> print g.read() 
foo,2 
bar,4 

所以我猜你的代碼可能是簡單的:

with open(output,'wb') as fout: 
    writer = csv.writer(fout,delimiter=',') 
    writer.writerows(avg) 

,而不是

np.savetxt(output,(avg), fmt = "%.1f", delimiter=", ") 
+0

那還不行。還有一些其他問題。 'AttributeError:'module'object has no attribute'writer'' – pistal

+0

@ user2015933 - [It's definitely in there](http://docs.python.org/2/library/csv.html#csv.writer)。 .. – mgilson

+0

'作家= csv.writer(fout,delimiter =',')' 'AttributeError:'module'object has no attribute'writer'' fyi,I imported csv。 – pistal

相關問題