2013-01-31 64 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

相关问题