回答:
numpy.savetxt
配列をテキストファイルに保存します。
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
、文字列に対してはエラーをスローします。numpy.array
文字列を含むオブジェクトのcsvとして保存するメソッドを規定できますか?
fmt='%s'
使用できますpandas
。余分なメモリが必要になるため、常に可能とは限りませんが、非常に高速で使いやすいです。
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
ヘッダーやインデックスが必要ない場合は、 to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
、ヘッダー行とインデックス列を削除します。
comments
キーワード引数をに設定する必要があります。''
これ#
は抑制されます。
tofile
これを行うのに便利な関数です:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
manページにはいくつかの便利なメモがあります:
これは、配列データをすばやく保存するための便利な機能です。エンディアンと精度に関する情報は失われるため、この方法は、エンディアンが異なるマシン間でデータをアーカイブしたり、データを転送したりするためのファイルには適していません。これらの問題の一部は、速度とファイルサイズを犠牲にして、データをテキストファイルとして出力することで克服できます。
注意。この関数は複数行のcsvファイルを生成せず、すべてを1行に保存します。
レコード配列をヘッダー付きのCSVファイルとして書き込むには、もう少し作業が必要です。
この例では、最初の行にヘッダーがあるCSVファイルを読み取り、次に同じファイルに書き込みます。
import numpy as np
# Write an example CSV file with headers on first line
with open('example.csv', 'w') as fp:
fp.write('''\
col1,col2,col3
1,100.1,string1
2,222.2,second string
''')
# Read it as a Numpy record array
ar = np.recfromcsv('example.csv')
print(repr(ar))
# rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')],
# dtype=[('col1', '<i4'), ('col2', '<f8'), ('col3', 'S13')])
# Write as a CSV file with headers on first line
with open('out.csv', 'w') as fp:
fp.write(','.join(ar.dtype.names) + '\n')
np.savetxt(fp, ar, '%s', ',')
この例では、コンマを含む文字列は考慮されないことに注意してください。非数値データの引用符を検討するには、csv
パッケージを使用します。
import csv
with open('out2.csv', 'wb') as fp:
writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(ar.dtype.names)
writer.writerows(ar.tolist())
すでに説明したように、配列をCSVファイルにダンプする最良の方法は、 .savetxt(...)
メソッドすることです。ただし、適切に実行するために知っておくべきことがいくつかあります。
たとえば、dtype = np.int32
asを使用した配列が
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
savetxt
として保存したい
np.savetxt('values.csv', narr, delimiter=",")
浮動小数点指数形式でデータを保存します。
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
次のように呼ばfmt
れるパラメータを使用してフォーマットを変更する必要があります
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
データを元の形式で保存する
また、ネットワーク経由でデータを転送する際に役立つ圧縮形式でsavetxt
データを格納するために使用することもでき.gz
ます。
ファイルの拡張子を変更するだけで.gz
、numpyがすべてを自動的に処理します
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
それが役に立てば幸い
fmt="%d"
が私が探していたものでした。ありがとうございました!
次のようにして、これを非常に簡単に行うこともできると思います。
例#1:
# Libraries to import
import pandas as pd
import nump as np
#N x N numpy array (dimensions dont matter)
corr_mat #your numpy array
my_df = pd.DataFrame(corr_mat) #converting it to a pandas dataframe
例#2:
#save as csv
my_df.to_csv('foo.csv', index=False) # "foo" is the name you want to give
# to csv file. Make sure to add ".csv"
# after whatever name like in the code
モジュールを使用せずに、純粋なpythonでそれを行うこともできます。
# format as a block of csv text to do whatever you want
csv_rows = ["{},{}".format(i, j) for i, j in array]
csv_text = "\n".join(csv_rows)
# write it to a file
with open('file.csv', 'w') as f:
f.write(csv_text)
Pythonでは、csv.writer()モジュールを使用してcsvファイルにデータを書き込みます。このモジュールは、csv.reader()モジュールに似ています。
import csv
person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]
csv.register_dialect('myDialect',
delimiter = '|',
quoting=csv.QUOTE_NONE,
skipinitialspace=True)
with open('dob.csv', 'w') as f:
writer = csv.writer(f, dialect='myDialect')
for row in person:
writer.writerow(row)
f.close()
区切り文字は、フィールドを区切るために使用される文字列です。デフォルト値はコンマ(、)です。