Apakah ada cara untuk membuang NumPy array ke dalam sebuah file CSV? Saya telah 2D NumPy array dan perlu untuk membuangnya dalam format terbaca-manusia.
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=",")
Anda dapat menggunakan panda
. Itu tidak mengambil beberapa memori tambahan sehingga's tidak selalu mungkin, tapi itu's sangat cepat dan mudah digunakan.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
jika anda don't ingin header atau indeks, gunakan to_csv("/path/ke/file.csv", header=Tidak ada, index=None)
untukberkas
adalah sebuah perangkat yang berfungsi untuk melakukan hal 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 yang memiliki beberapa catatan yang berguna:
Ini adalah fasilitas yang berfungsi untuk cepat penyimpanan data array. Informasi tentang endianness dan presisi yang hilang, sehingga metode ini tidak pilihan yang baik untuk file yang dimaksudkan untuk data arsip atau data transportasi antara mesin dengan endianness berbeda. Beberapa masalah ini dapat diatasi dengan keluaran data sebagai file teks, dengan mengorbankan kecepatan dan ukuran file.
Catatan. Fungsi ini tidak menghasilkan multi-line csv file, menyimpan segalanya untuk satu baris.
Menulis catatan array sebagai file CSV dengan header membutuhkan sedikit lebih banyak pekerjaan.
Ini contoh membaca file CSV dengan header pada baris pertama, kemudian 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 tanda koma. Untuk mempertimbangkan penawaran untuk 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 dalam sebuah file CSV adalah dengan menggunakan .savetxt(...)
metode. Namun, ada hal-hal tertentu kita harus tahu untuk melakukannya dengan benar.
Misalnya, jika anda memiliki numpy terkait dengan dtype = np.int32
sebagai
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-data floating point eksponensial format sebagai
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Anda akan memiliki untuk mengubah format dengan menggunakan parameter yang disebut fmt
sebagai
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
untuk menyimpan data dalam format asli
Juga, savetxt
dapat digunakan untuk menyimpan data dalam .gz
format terkompresi yang mungkin berguna saat mentransfer data melalui jaringan.
Kita hanya perlu mengubah ekstensi dari file .gz
dan numpy akan mengurus semuanya secara otomatis
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Semoga membantu
jika anda ingin menulis di kolom:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Berikut ini 'a' adalah nama dari numpy array dan 'file' adalah variabel untuk menulis dalam sebuah file.
Jika anda ingin menulis di baris:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Saya percaya anda juga dapat mencapai hal ini cukup sederhana sebagai berikut:
misalnya #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
misalnya #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
Anda juga dapat melakukannya dengan python murni tanpa menggunakan modul.
# 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)
Jika anda ingin menyimpan numpy array (misalnya your_array = np.array([[1,2],[3,4]])
) untuk satu sel, anda bisa mengubahnya dengan your_array.kedaftar()
.
Kemudian simpan dengan cara normal untuk satu sel, dengan pembatas=';'
dan sel dalam csv-file akan terlihat seperti ini[[1, 2], [2, 4]]
Kemudian anda bisa mengembalikan array seperti ini:
your_array = np.array(ast.literal_eval(cell_string))
Di Python kita menggunakan csv.penulis() modul untuk menulis data ke file csv. Modul ini mirip dengan csv.pembaca() modul.
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 default adalah koma(,).