Risposte:
numpy.savetxt
salva un array in un file di testo.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
stringhe. Potresti prescrivere un metodo per salvare come CSV per un numpy.array
oggetto contenente stringhe?
fmt='%s'
È possibile utilizzare pandas
. Richiede memoria aggiuntiva, quindi non è sempre possibile, ma è molto veloce e facile da usare.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
se non si desidera un'intestazione o un indice, utilizzare to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
rimuovono la riga di intestazione e la colonna dell'indice.
comments
argomento della parola chiave su ''
, il #
sarà soppresso.
tofile
è una comoda funzione per fare questo:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
La pagina man contiene alcune note utili:
Questa è una comoda funzione per una rapida memorizzazione dei dati dell'array. Le informazioni su endianness e precisione vanno perse, quindi questo metodo non è una buona scelta per i file destinati ad archiviare dati o trasportare dati tra macchine con endianness diversi. Alcuni di questi problemi possono essere risolti emettendo i dati come file di testo, a scapito della velocità e delle dimensioni del file.
Nota. Questa funzione non produce file CSV multilinea, ma salva tutto su una riga.
Scrivere array di record come file CSV con intestazioni richiede un po 'più di lavoro.
Questo esempio legge un file CSV con l'intestazione sulla prima riga, quindi scrive lo stesso file.
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', ',')
Si noti che questo esempio non considera le stringhe con virgole. Per considerare le virgolette per i dati non numerici, utilizzare il csv
pacchetto:
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())
Come già discusso, il modo migliore per scaricare l'array in un file CSV è usando il .savetxt(...)
metodo. Tuttavia, ci sono alcune cose che dovremmo sapere per farlo correttamente.
Ad esempio, se si dispone di una matrice numpy con dtype = np.int32
as
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
e vuoi salvare usando savetxt
come
np.savetxt('values.csv', narr, delimiter=",")
Memorizzerà i dati in formato esponenziale in virgola mobile come
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Dovrai cambiare la formattazione usando un parametro chiamato fmt
as
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
per memorizzare i dati nel suo formato originale
Inoltre, savetxt
può essere utilizzato per l'archiviazione di dati in .gz
formato compresso che potrebbe essere utile durante il trasferimento di dati in rete.
Dobbiamo solo cambiare l'estensione del file poiché .gz
numpy si occuperà automaticamente di tutto
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Spero che sia d'aiuto
fmt="%d"
era quello che stavo cercando. Grazie!
Credo che tu possa anche realizzare questo semplicemente come segue:
ad es. # 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
ad es. # 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
se vuoi scrivere nella colonna:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Qui "a" è il nome dell'array numpy e "file" è la variabile da scrivere in un file.
Se vuoi scrivere in fila:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Se vuoi salvare l'array numpy (ad es. your_array = np.array([[1,2],[3,4]])
) In una cella, puoi prima convertirlo con your_array.tolist()
.
Quindi salvalo nel modo normale in una cella, con delimiter=';'
e la cella nel file CSV sarà simile a questa[[1, 2], [2, 4]]
Quindi è possibile ripristinare l'array in questo modo:
your_array = np.array(ast.literal_eval(cell_string))
Puoi anche farlo con Python puro senza usare alcun modulo.
# 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)
In Python usiamo il modulo csv.writer () per scrivere i dati in file CSV. Questo modulo è simile al modulo 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()
Un delimitatore è una stringa utilizzata per separare i campi. Il valore predefinito è virgola (,).