Volcar una matriz NumPy en un archivo csv

¿Hay una manera de volcar una matriz NumPy en un archivo CSV? Tengo una matriz NumPy 2D y necesito volcarla en un formato legible.

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=",") 

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 desea un encabezado o índice, use to_csv("/path/to/file.csv", header=None, index=None)

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 de conveniencia para el almacenamiento rápido de datos de matriz. La información sobre el endianness y la precisión se pierde, por lo que este método no es una buena opción para los archivos destinados a archivar datos o transportar datos entre máquinas con diferentes endianness. Algunos de estos problemas se pueden superar generando 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 arrays 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', ' 

Tenga en cuenta que este ejemplo no considera cadenas con comas. Para considerar las cotizaciones para datos no numéricos, use el paquete csv :

 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()) 

Si quieres escribir en columna:

  for x in np.nditer(aT, 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(aT, 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 con your_array.tolist() .

Luego guárdelo de la manera normal en una celda, con delimiter=';' y la celda en el archivo csv se verá así [[1, 2], [2, 4]]

Entonces podrías restaurar tu matriz de esta manera: your_array = np.array(ast.literal_eval(cell_string))

También puedes hacerlo con python puro sin utilizar 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) 

Como ya se mencionó, la mejor manera de volcar la matriz en un archivo CSV es mediante el uso del método .savetxt(...) . Sin embargo, hay ciertas cosas que debemos saber para hacerlo correctamente.

Por ejemplo, si tiene una matriz dtype = np.int32 con dtype = np.int32 como

  narr = np.array([[1,2], [3,4], [5,6]], dtype=np.int32) 

y quiere guardar usando savetxt como

 np.savetxt('values.csv', narr, delimiter=",") 

Almacenará los datos en formato exponencial de punto flotante como

 1.000000000000000000e+00,2.000000000000000000e+00 3.000000000000000000e+00,4.000000000000000000e+00 5.000000000000000000e+00,6.000000000000000000e+00 

Deberá 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

Guardar datos en formato comprimido gz

Además, savetxt se puede usar para almacenar datos en formato comprimido .gz , lo que puede ser útil al transferir datos a través de la red.

Solo necesitamos cambiar la extensión del archivo ya que .gz y numpy se encargarán de todo automáticamente

 np.savetxt('values.gz', narr, fmt="%d", delimiter=",") 

Espero eso ayude

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 (,).

Creo que también puedes lograr esto de la siguiente manera:

  1. Convertir la matriz de Numpy en un dataframe de Pandas
  2. Guardar como CSV

por ejemplo, # 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 

por ejemplo, # 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