0

そこで、フォルダー内のすべての 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((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

私は問題が何であるかを理解していないようです。たぶん、フロートに文字列を追加しようとしているからでしょうか? numpy.. で sを確認しfmtましたが、興味深いものは見つかりませんでした。

/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)
4

1 に答える 1

1

あなたが提供しているフォーマット文字に問題があると思いますnp.savetxt. (string-float タプルがあり、delimiter は、float のみを使用していることを意味します)。代わりにこれをお勧め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=", ")
于 2013-01-31T21:28:22.637 に答える