13

ヘッダーを追加したい配列があります。

これは私が今持っているものです:

0.0,1.630000e+01,1.990000e+01,1.840000e+01
1.0,1.630000e+01,1.990000e+01,1.840000e+01
2.0,1.630000e+01,1.990000e+01,1.840000e+01

これは私が欲しいものです:

SP,1,2,3
0.0,1.630000e+01,1.990000e+01,1.840000e+01
1.0,1.630000e+01,1.990000e+01,1.840000e+01
2.0,1.630000e+01,1.990000e+01,1.840000e+01

注:「SP」は常に最初になり、その後に列の番号が続く場合があります。

これが私の既存のコードです:

fmt = ",".join(["%s"] + ["%10.6e"] * (my_array.shape[1]-1))

np.savetxt('final.csv', my_array, fmt=fmt,delimiter=",")
4

2 に答える 2

42

Numpy 1.7.0 以降、まさにこの目的のために、ヘッダー、フッター、コメントの 3 つのパラメーターがnumpy.savetxtに追加されました。したがって、必要に応じて実行するコードは、次のように簡単に記述できます。

import numpy
a = numpy.array([[0.0,1.630000e+01,1.990000e+01,1.840000e+01],
                 [1.0,1.630000e+01,1.990000e+01,1.840000e+01],
                 [2.0,1.630000e+01,1.990000e+01,1.840000e+01]])
fmt = ",".join(["%s"] + ["%10.6e"] * (a.shape[1]-1))
numpy.savetxt("temp", a, fmt=fmt, header="SP,1,2,3", comments='')
于 2013-05-13T10:40:01.127 に答える
16

注:この回答は、質問が書かれたときに関連する古いバージョンのnumpy用に書かれたものです。最新の numpy では、makhlaghi の回答がよりエレガントなソリューションを提供します。

numpy.savetxtファイルオブジェクトにも書き込むことができるので、自分でファイルを開き、データの前にヘッダーを書き込むことができます:

import numpy
a = numpy.array([[0.0,1.630000e+01,1.990000e+01,1.840000e+01],
                 [1.0,1.630000e+01,1.990000e+01,1.840000e+01],
                 [2.0,1.630000e+01,1.990000e+01,1.840000e+01]])
fmt = ",".join(["%s"] + ["%10.6e"] * (a.shape[1]-1))

# numpy.savetxt, at least as of numpy 1.6.2, writes bytes
# to file, which doesn't work with a file open in text mode.  To
# work around this deficiency, open the file in binary mode, and
# write out the header as bytes.
with open('final.csv', 'wb') as f:
  f.write(b'SP,1,2,3\n')
  #f.write(bytes("SP,"+lists+"\n","UTF-8"))
  #Used this line for a variable list of numbers
  numpy.savetxt(f, a, fmt=fmt, delimiter=",")
于 2012-09-01T07:27:39.373 に答える