Jawaban:
numpy.savetxt
menyimpan array ke file teks.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
string. Bisakah Anda meresepkan metode untuk menyimpan sebagai csv untuk numpy.array
objek yang berisi string?
fmt='%s'
Anda bisa menggunakannya pandas
. Memang diperlukan beberapa memori tambahan sehingga tidak selalu memungkinkan, tetapi sangat cepat dan mudah digunakan.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
jika Anda tidak ingin tajuk atau indeks, gunakan to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
menghapus baris header dan kolom indeks.
comments
argumen kata kunci ''
, yang #
akan ditekan.
tofile
adalah fungsi yang mudah untuk melakukan ini:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
Halaman manual memiliki beberapa catatan berguna:
Ini adalah fungsi praktis untuk penyimpanan cepat data array. Informasi tentang endianness dan presisi hilang, sehingga metode ini bukan pilihan yang baik untuk file yang dimaksudkan untuk mengarsipkan data atau mengangkut data antara mesin dengan endianness yang berbeda. Beberapa masalah ini dapat diatasi dengan mengeluarkan data sebagai file teks, dengan mengorbankan kecepatan dan ukuran file.
Catatan. Fungsi ini tidak menghasilkan file csv multi-line, ia menyimpan semuanya menjadi satu baris.
Menulis array rekaman sebagai file CSV dengan header membutuhkan sedikit lebih banyak pekerjaan.
Contoh ini membaca file CSV dengan header di baris pertama, lalu menulis file yang sama.
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', ',')
Perhatikan bahwa contoh ini tidak mempertimbangkan string dengan koma. Untuk mempertimbangkan penawaran data non-numerik, gunakan csv
paket:
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())
Seperti yang sudah dibahas, cara terbaik untuk membuang array ke file CSV adalah dengan menggunakan .savetxt(...)
metode. Namun, ada beberapa hal yang harus kita ketahui untuk melakukannya dengan benar.
Misalnya, jika Anda memiliki array numpy dengan dtype = np.int32
as
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
dan ingin menyimpan menggunakan savetxt
sebagai
np.savetxt('values.csv', narr, delimiter=",")
Ini akan menyimpan data dalam format eksponensial titik mengambang sebagai
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Anda harus mengubah pemformatan dengan menggunakan parameter yang disebut fmt
sebagai
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
untuk menyimpan data dalam format aslinya
Juga, savetxt
dapat digunakan untuk menyimpan data dalam .gz
format terkompresi yang mungkin berguna saat mentransfer data melalui jaringan.
Kami hanya perlu mengubah ekstensi file .gz
dan numpy akan mengurus semuanya secara otomatis
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Semoga ini bisa membantu
fmt="%d"
yang saya cari. Terima kasih!
Saya percaya Anda juga dapat melakukan ini dengan cukup sederhana sebagai berikut:
mis. # 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
mis. # 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
jika Anda ingin menulis di kolom:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Di sini 'a' adalah nama array numpy dan 'file' adalah variabel untuk ditulis dalam file.
Jika Anda ingin menulis berturut-turut:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Jika Anda ingin menyimpan array numpy Anda (mis. your_array = np.array([[1,2],[3,4]])
) Ke satu sel, Anda dapat mengonversinya terlebih dahulu your_array.tolist()
.
Kemudian simpan dengan cara normal ke satu sel, dengan delimiter=';'
dan sel dalam file csv akan terlihat seperti ini[[1, 2], [2, 4]]
Maka Anda dapat mengembalikan array Anda seperti ini:
your_array = np.array(ast.literal_eval(cell_string))
Anda juga dapat melakukannya dengan python murni tanpa menggunakan modul apa pun.
# 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)
Dalam Python kita menggunakan modul csv.writer () untuk menulis data ke file csv. Modul ini mirip dengan modul 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()
Pembatas adalah string yang digunakan untuk memisahkan bidang. Nilai standarnya adalah koma (,).