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.arraydizeler için bir hata atar . Dize numpy.arrayiç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=Nonebaşlık satırı ve dizin sütununu kaldırır.
commentsAnahtar 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 csvpaketi 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.int32olduğu
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
ve kullanma kaydetmek istediğiniz savetxtkadar
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 savetxtsaklamak için kullanılabilir .gz.
Sadece dosyanın uzantısını değiştirmemiz gerekiyor .gzve 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.