HOWTO · NumPy
Escriba NumPy Array en CSV en Python
Este tutorial demuestra cómo guardar un array numpy en un archivo csv
En esta página
Usa numpy.savetxt() para escribir un array numérico de NumPy como texto separado por comas. Elige pandas si el array forma parte de un flujo de trabajo con DataFrame, o csv.writer si necesitas crear o personalizar las filas. CSV almacena filas y columnas, así que decide cómo deben corresponder a esas filas los arrays unidimensionales o de dimensiones superiores antes de guardarlos.
Los ejemplos usan un array bidimensional pequeño con valores enteros. Cada uno escribe solo los valores, sin encabezado ni índice. NumPy es necesario para los ejemplos con arrays; pandas es un paquete adicional y solo se necesita para su sección. Los bloques de código y las etiquetas visibles de los ejemplos se conservan en inglés.
Elige un método según el array y el resultado que necesitas
Para un array numérico y un archivo de texto delimitado sencillo, numpy.savetxt() es una opción directa. Su parámetro delimiter controla el separador y fmt determina cómo se representa cada valor. Usa pandas si ya necesitas operaciones de DataFrame o etiquetas de columna. Usa csv.writer si las filas requieren un procesamiento personalizado o necesitas las reglas de entrecomillado CSV de Python. El escritor integrado maneja las comas y las comillas dentro de los campos con más seguridad que concatenar valores en cadenas manualmente.
numpy.savetxt() trata un array unidimensional como un vector columna, por lo que escribe un valor por línea. Para escribir esos valores en una sola fila CSV, cambia la forma del array a (1, -1) antes de guardarlo. El bucle con csv.writer que aparece más abajo presupone un array bidimensional: cada row iterado es, a su vez, iterable. Si la entrada es unidimensional, usa writer.writerow(data) para escribir una fila, o itera sobre los valores y llama a writer.writerow([value]) para escribir un valor por fila. Un archivo CSV no representa de forma nativa tres dimensiones. Cambia la forma de un array 3D para convertirlo en filas y columnas, o aplánalo; elige un orden que quien lea el archivo pueda reconstruir. No dejes que el aplanamiento determine silenciosamente la disposición de los datos.
Guarda un array de NumPy con numpy.savetxt()
El formato '%d' es adecuado para los valores enteros mostrados. Para datos de punto flotante, elige un formato como '%.3f' si bastan tres cifras decimales; el formato puede redondear los valores, así que selecciona una precisión adecuada para los datos que necesitas conservar. Puedes pasar otro separador, como ';' o '\t', mediante delimiter cuando la herramienta receptora lo requiera.
Ejecuta este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])
with TemporaryDirectory() as directory:
path = Path(directory) / "array.csv"
np.savetxt(path, data, delimiter=",", fmt="%d")
print(path.read_text(), end="")
1,2,3
4,5,6
Guarda un array de NumPy con pandas
Convierte el array en un DataFrame y luego llama a to_csv(). De forma predeterminada, pandas escribe el índice del DataFrame y los nombres de las columnas; establece index=False y header=False si el archivo debe contener solo los valores del array. Conserva esos campos o proporciónalos cuando sean etiquetas útiles para quien reciba el archivo.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import numpy as np
import pandas as pd
data = np.array([[1, 2, 3], [4, 5, 6]])
with TemporaryDirectory() as directory:
path = Path(directory) / "array.csv"
pd.DataFrame(data).to_csv(path, index=False, header=False)
print(path.read_text(), end="")
1,2,3
4,5,6
Escribe filas con el módulo csv de Python
csv.writer escribe cada fila iterable y escapa los campos cuando lo exigen las reglas de CSV. Abre el archivo con newline=""; así el módulo csv gestiona los caracteres de nueva línea y se evitan líneas en blanco adicionales en plataformas que traducen los saltos de línea. El ejemplo siguiente usa directamente las filas del array.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
import csv
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])
with TemporaryDirectory() as directory:
path = Path(directory) / "array.csv"
with path.open("w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
for row in data:
writer.writerow(row)
print(path.read_text(), end="")
1,2,3
4,5,6
Para añadir filas, abre el destino en modo de anexado ("a") y escribe solo las filas nuevas. Comprueba que su orden y número de columnas coincidan con los del archivo existente; el modo de anexado no valida esos datos ni añade un encabezado. Para una entrada unidimensional, decide si representa una sola fila o un valor por fila y cambia su forma o envuélvela según corresponda.
Comprende las limitaciones de ndarray.tofile()
ndarray.tofile() es un método de array, pero no es un escritor CSV. Escribe los elementos del array en orden aplanado y no conserva la forma original ni la estructura de filas y columnas. Un separador de coma puede producir texto delimitado, pero el archivo no indica al lector cuáles eran las dimensiones originales. La representación de salida también depende del formato elegido; que los datos aparezcan en una sola línea no significa por sí solo que se haya perdido precisión numérica. Si necesitas una disposición CSV explícita, prefiere savetxt, pandas o csv.writer.
Escribe texto CSV manualmente solo para datos sencillos
Para un array bidimensional pequeño y conocido que contenga valores numéricos sencillos, el formato de cadenas de Python permite crear filas directamente. Este método presupone que la forma y los valores son adecuados para texto sin procesar. Construir todo el resultado con join consume memoria proporcional al tamaño de la salida; además, la concatenación manual no gestiona los valores con comas, comillas o saltos de línea conforme a las reglas de CSV. Para datos generales o campos de texto, usa csv.writer.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from pathlib import Path
from tempfile import TemporaryDirectory
data = [[1, 2, 3], [4, 5, 6]]
with TemporaryDirectory() as directory:
path = Path(directory) / "array.csv"
content = "\n".join(",".join(str(value) for value in row) for row in data)
path.write_text(content + "\n", encoding="utf-8")
print(path.read_text(), end="")
1,2,3
4,5,6