Volcar una matriz NumPy en un archivo csv


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

Author: senderle, 2011-05-21

7 answers

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=",")
 564
Author: Jim Brissom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-26 05:39:44

Es fácil y rápido con pandas

import pandas as pd 
df = pd.DataFrame(np_array)
df.to_csv("file_path.csv")
 57
Author: maxbellec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-12 08:38:49

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 man tiene algunas notas útiles:

Esta es una función de conveniencia para el almacenamiento rápido de datos de matriz. La información sobre endianness y la precisión se pierde, así 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 ser superado por la salida de los datos como archivos de texto, a expensas de velocidad y archivo Tamaño.

Nota. Esta función no produce archivos csv de varias líneas, guarda todo en una línea.

 31
Author: atomh33ls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-07 17:57:45

Escribir arreglos 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 comillas para datos no numéricos, utilice 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())
 9
Author: Mike T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-08 02:09:18

Si desea 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 'file' es la variable a escribir en un archivo.

Si desea escribir en fila:

    writer= csv.writer(file, delimiter=',')
    for x in np.nditer(a.T, order='C'): 
            row.append(str(x))
    writer.writerow(row)
 3
Author: Rimjhim Bhagat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-07 10:49:58

Si desea guardar su matriz numpy (por ejemplo, your_array = np.array([[1,2],[3,4]])) en una celda, podría 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ía restaurar su matriz de esta manera: your_array = np.array(ast.literal_eval(cell_string))

 2
Author: Mr Poin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-17 17:23:37

También puedes 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)
 2
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 01:39:39