Există o modalitate de a arunca un NumPy matrice într-un fișier CSV? Am un 2D NumPy matrice și trebuie să-l arunce într-uman poate fi citit în format.
numpy.savetxt
memorează o matrice într-un fișier text.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
Puteți utiliza panda
. Acesta nu ia ceva suplimentar de memorie deci's nu este întotdeauna posibil, dar's foarte rapid și ușor de utilizat.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
dacă tu nu't vrei un antet sau index, utilizat to_csv("/path/to/file.csv", antet=Nici unul, index=None)
tofile
este o funcție convenabilă pentru a face acest lucru:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
Pagina de om are unele note utile:
Aceasta este o funcție de confort pentru rapid de stocare de matrice de date. Informații privind endianness și precizie este pierdut, astfel încât această metodă nu este o alegere buna pentru fișiere destinat datelor de arhivă sau de transport de date între mașini cu diferite endianness. Unele dintre aceste probleme pot fi depășite prin afișarea de date ca fișiere text, în detrimentul viteza și dimensiunea fișierului.
Notă. Această funcție nu produce multi-linie fișiere csv, se economisește totul pentru o singură linie.
Scris de înregistrare tablouri ca fișiere CSV cu antete necesită un pic mai mult de lucru.
Acest exemplu arată într-un fișier CSV cu antet pe prima linie, apoi scrie același fișier.
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', ',')
Rețineți că acest exemplu nu ia în considerare siruri de caractere cu virgulă. Să ia în considerare citate de date non-numerice, folosi csv
pachet:
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())
După cum sa discutat deja, cel mai bun mod de a arunca matrice într-un fișier CSV este prin utilizarea .savetxt(...)
metoda. Cu toate acestea, există anumite lucruri pe care trebuie să știi să-l faci corect.
De exemplu, dacă aveți un numpy matrice cu dtype = np.int32` ca
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
și doriți să salvați folosind savetxt
ca
np.savetxt('values.csv', narr, delimiter=",")
Acesta va stoca date în virgulă mobilă exponențială a format ca
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Va trebui să schimbați formatarea folosind un parametru numit fmt
ca
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
pentru a stoca date în formatul original
De asemenea, savetxt
poate fi folosit pentru stocarea de date in .gz
format comprimat, care ar putea fi utile în timp ce transferul de date în rețea.
Avem nevoie doar de a schimba extensia de fișier ca .gz
numpy și va avea grijă de tot automat
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Sper că vă ajută
dacă doriți să scrie în coloana:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Aici 'un' este numele numpy matrice și 'dosar' este variabila pentru a scrie într-un fișier.
Dacă doriți să scrie în rând:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Cred, de asemenea, puteți realiza acest lucru, pur și simplu, după cum urmează:
exemplu #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
exemplu #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
De asemenea, puteți face cu python pur, fără a utiliza orice module.
# 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)
Dacă vrei să-ți salvezi numpy matrice (de exemplu, your_array = np.matrice([[1,2],[3,4]])
) la o singură celulă, puteți converti mai întâi cu your_array.tolist()
.
Apoi salvați-l în mod normal de la o singură celulă, cu delimitator=';' și celula în csv-fișier va arata astfel
[[1, 2], [2, 4]]`
Atunci ai putea restaura matrice astfel:
your_array = np.array(ast.literal_eval(cell_string))
În Python vom folosi csv.scriitor() modul de a scrie date în fișiere csv. Acest modul este similar cu csv.reader() module.
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()
Un delimitator este un șir de caractere utilizat pentru a separa câmpurile. Valoarea implicită este virgula(,).