Respuestas:
numpy.savetxt
guarda una matriz en un archivo de texto.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
numpy.array
de cadenas. ¿Podría prescribir un método para guardar como csv para un numpy.array
objeto que contiene cadenas?
fmt='%s'
Puedes usar pandas
. Requiere algo de memoria adicional, por lo que no siempre es posible, pero es muy rápido y fácil de usar.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
si no quieres un encabezado o índice, usa to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
eliminan la fila del encabezado y la columna de índice.
comments
argumento de la palabra clave en ''
, #
se suprimirá.
tofile
Es una función conveniente para hacer esto:
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 página del manual tiene algunas notas útiles:
Esta es una función conveniente para el almacenamiento rápido de datos de matriz. Se pierde información sobre endianness y precisión, por lo que este método no es una buena opción para archivos destinados a archivar datos o transportar datos entre máquinas con diferente endianness. Algunos de estos problemas pueden superarse enviando los datos como archivos de texto, a expensas de la velocidad y el tamaño del archivo.
Nota. Esta función no produce archivos csv de varias líneas, guarda todo en una línea.
Escribir matrices de registros como archivos CSV con encabezados requiere un poco más de trabajo.
Este ejemplo lee un archivo CSV con el encabezado en la primera línea, luego escribe el mismo archivo.
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', ',')
Tenga en cuenta que este ejemplo no considera cadenas con comas. Para considerar las comillas para datos no numéricos, use el csv
paquete:
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())
Como ya se discutió, la mejor manera de volcar la matriz en un archivo CSV es mediante el uso de .savetxt(...)
método. Sin embargo, hay ciertas cosas que debemos saber para hacerlo correctamente.
Por ejemplo, si tiene una matriz con numpy dtype = np.int32
como
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
y quiero guardar usando savetxt
como
np.savetxt('values.csv', narr, delimiter=",")
Almacenará los datos en formato exponencial de coma flotante como
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
Tendrá que cambiar el formato utilizando un parámetro llamado fmt
como
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
para almacenar datos en su formato original
Además, savetxt
se puede usar para almacenar datos en.gz
formato comprimido que pueden ser útiles al transferir datos a través de la red.
Solo necesitamos cambiar la extensión del archivo ya que .gz
numpy se encargará de todo automáticamente
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Espero eso ayude
fmt="%d"
era lo que estaba buscando. ¡Gracias!
Creo que también puedes lograr esto de la siguiente manera:
ej. # 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
ej. # 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
si quieres escribir en la columna:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Aquí 'a' es el nombre de la matriz numpy y 'archivo' es la variable para escribir en un archivo.
Si quieres escribir en fila:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Si desea guardar su matriz numpy (por ejemplo your_array = np.array([[1,2],[3,4]])
) en una celda, puede convertirla primero conyour_array.tolist()
.
Luego guárdelo de la forma normal en una celda, con delimiter=';'
y la celda en el archivo csv se verá así[[1, 2], [2, 4]]
Entonces podría restaurar su matriz de esta manera:
your_array = np.array(ast.literal_eval(cell_string))
También puede hacerlo con Python puro sin usar ningún módulo.
# 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)
En Python usamos el módulo csv.writer () para escribir datos en archivos csv. Este módulo es similar al módulo 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 delimitador es una cadena utilizada para separar campos. El valor predeterminado es coma (,).