python matrices - Volcar una matriz NumPy en un archivo csv




libreria multiplicar (9)

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', '<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 citas 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())

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


Es fácil y rápido con pandas.

import pandas as pd 
df = pd.DataFrame(np_array)
df.to_csv("file_path.csv")

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


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 endianness diferente. 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.


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


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


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

Si quieres escribir en 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)

Hay múltiples soluciones con todas sus peculiaridades. Esta página da una buena visión general. Una posible solución es:

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}




python arrays csv numpy