NumPy dizisini CSV dosyasına dökmenin bir yolu var mı? Bir 2D NumPy dizisi var ve insan tarafından okunabilir biçimde dökümü gerekiyor.
NumPy dizisini CSV dosyasına dökmenin bir yolu var mı? Bir 2D NumPy dizisi var ve insan tarafından okunabilir biçimde dökümü gerekiyor.
Yanıtlar:
numpy.savetxt
bir diziyi bir metin dosyasına kaydeder.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
dizeler için bir hata atar . Dize numpy.array
içeren bir nesne için csv olarak kaydetmek için bir yöntem önerebilir misiniz ?
fmt='%s'
Kullanabilirsiniz pandas
. Ekstra bellek gerektirir, bu yüzden her zaman mümkün değildir, ancak kullanımı çok hızlı ve kolaydır.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
başlık veya dizin istemiyorsanız şunu kullanın: to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
başlık satırı ve dizin sütununu kaldırır.
comments
Anahtar kelime bağımsız değişkenini şu şekilde ayarlamanız gerekir ''
, #
bastırılacaktır.
tofile
bunu yapmak için uygun bir işlevdir:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
Kılavuz sayfasının bazı yararlı notları vardır:
Bu, dizi verilerinin hızlı bir şekilde depolanması için bir kolaylık işlevidir. Endianness ve kesinlik bilgileri kaybolur, bu nedenle bu yöntem, verileri arşivlemeyi veya farklı endiannessli makineler arasında veri aktarmayı amaçlayan dosyalar için iyi bir seçim değildir. Bu sorunlardan bazıları, hız ve dosya boyutu pahasına veriler metin dosyaları olarak çıkarılarak aşılabilir.
Not. Bu işlev çok satırlı csv dosyaları üretmez, her şeyi bir satıra kaydeder.
Kayıt dizilerini başlıklı CSV dosyaları olarak yazmak biraz daha fazla çalışma gerektirir.
Bu örnek, ilk satırda başlık bulunan bir CSV dosyasını okur, ardından aynı dosyayı yazar.
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', ',')
Bu örneğin virgül içeren dizeleri dikkate almadığını unutmayın. Sayısal olmayan veriler için teklifleri dikkate almak üzere csv
paketi kullanın :
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())
Daha önce de tartışıldığı gibi, diziyi bir CSV dosyasına dökmenin en iyi yolu .savetxt(...)
yöntem kullanmaktır . Bununla birlikte, düzgün bir şekilde yapmak için bilmemiz gereken bazı şeyler var.
Örneğin, eğer bir numpy dizi var dtype = np.int32
olduğu
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
ve kullanma kaydetmek istediğiniz savetxt
kadar
np.savetxt('values.csv', narr, delimiter=",")
Verileri kayan nokta üstel biçiminde
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Sen adında bir parametreyi kullanarak biçimlendirmeyi değiştirmek zorunda kalacak fmt
şekilde
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
verileri orijinal biçiminde saklamak için
Ayrıca, verileri ağ üzerinden aktarırken faydalı olabilecek sıkıştırılmış biçimde savetxt
saklamak için kullanılabilir .gz
.
Sadece dosyanın uzantısını değiştirmemiz gerekiyor .gz
ve numpy her şeyi otomatik olarak halledecek
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Umarım yardımcı olur
fmt="%d"
Aradığım buydu. Teşekkür ederim!
Bunu basitçe şu şekilde yapabileceğinize inanıyorum:
örneğin # 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
örneğin # 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
sütuna yazmak istiyorsanız:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Burada 'a' numpy dizisinin adıdır ve 'file' bir dosyaya yazılacak değişkendir.
Satır olarak yazmak istiyorsanız:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Numpy dizinizi (örn. your_array = np.array([[1,2],[3,4]])
) Bir hücreye kaydetmek istiyorsanız , önce onuyour_array.tolist()
.
Sonra bir hücreye normal şekilde kaydedin delimiter=';'
ve csv dosyasındaki hücre şöyle görünecektir[[1, 2], [2, 4]]
Ardından dizinizi şu şekilde geri yükleyebilirsiniz:
your_array = np.array(ast.literal_eval(cell_string))
Herhangi bir modül kullanmadan da saf python ile yapabilirsiniz.
# 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'da csv dosyalarına veri yazmak için csv.writer () modülünü kullanıyoruz. Bu modül csv.reader () modülüne benzer.
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()
Sınırlayıcı, alanları ayırmak için kullanılan bir dizedir. Varsayılan değer virgül (,) şeklindedir.