HOWTO · Pandas
Pandas anexar a CSV
Este tutorial demuestra cómo añadir datos a un archivo CSV existente usando to_csv() en modo de apéndice
En esta página
Usa Pandas to_csv() con mode="a" para añadir filas de un DataFrame después de las que ya contiene un archivo CSV. El modo de anexado conserva el contenido existente. Establece header=False si el archivo ya tiene encabezado y index=False si no quieres que el índice del DataFrame se convierta en una columna adicional del CSV.
Añadir un DataFrame a un archivo CSV existente
Este ejemplo crea un CSV inicial y le añade un segundo DataFrame. En tu propio código, usa la ruta de tu archivo CSV. Mantén las columnas que añadas en el mismo orden que las columnas del CSV existente: los archivos CSV no almacenan un esquema que reordene automáticamente los valores según el nombre de las columnas.
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 pandas as pd
with TemporaryDirectory() as directory:
path = Path(directory) / "records.csv"
original = pd.DataFrame({"name": ["Ava"], "score": [8]})
added = pd.DataFrame({"name": ["Noah"], "score": [9]})
original.to_csv(path, index=False)
added.to_csv(path, mode="a", header=False, index=False)
print(path.read_text(), end="")
La primera escritura crea el archivo y su encabezado. La segunda usa mode="a" para añadir una fila al final, con header=False para no repetir los nombres de las columnas y index=False para que Pandas no añada el índice de la fila. El archivo final contiene la fila original seguida de la añadida. Si quieres incluir el índice del DataFrame como columna, omite index=False y ten en cuenta esa columna adicional al leer el CSV.
Escribir el encabezado solo cuando el archivo CSV está vacío
Si el destino puede estar vacío o aún no existir, ábrelo en modo de anexado y comprueba su posición actual dentro del archivo. Abrir una ruta inexistente con mode="a" crea el archivo. La llamada tell() indica la posición actual; justo después de abrir el archivo en modo de anexado, una posición de 0 significa que está vacío. Escribe el encabezado solo en ese caso.
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 pandas as pd
with TemporaryDirectory() as directory:
path = Path(directory) / "records.csv"
rows = pd.DataFrame({"name": ["Mia"], "score": [7]})
with path.open("a", encoding="utf-8", newline="") as csv_file:
write_header = csv_file.tell() == 0
rows.to_csv(csv_file, header=write_header, index=False)
Este enfoque sirve tanto para un archivo nuevo como para un CSV existente: un archivo recién creado o vacío recibe los nombres de las columnas, mientras que uno que ya contiene datos recibe solo la fila nueva. Usa el mismo orden de columnas y campos compatibles cada vez que añadas datos. Si varios procesos de tu programa pueden actualizar el archivo al mismo tiempo, coordina esas escrituras para evitar que otro proceso se intercale entre la comprobación del encabezado y la escritura de la fila.
Verificar las filas añadidas y evitar errores comunes
Lee el CSV después de escribirlo cuando necesites confirmar su contenido. En el primer ejemplo, el archivo tiene un encabezado seguido de los registros original y añadido. La instrucción print(path.read_text(), end="") muestra el contenido exacto del archivo como texto seleccionable al ejecutar el ejemplo. Las etiquetas y los valores visibles name, score, Ava y Noah permanecen en inglés dentro del ejemplo inmutable.
Al adaptar los ejemplos, comprueba estos detalles:
- Las columnas del DataFrame añadido deben corresponder a las del CSV y aparecer en el mismo orden. Pandas escribe los valores por posición; al anexarlos, no busca las columnas del CSV por nombre.
- Usa
header=Falsesi el archivo no está vacío y ya tiene encabezado. Un encabezado repetido se leería como una fila de datos normal. - Elige
index=Falsesi el índice de las filas no forma parte de tus datos. De lo contrario, incluye la columna del índice y tenla en cuenta en la estructura del archivo. - El modo de anexado añade texto al final del archivo; no valida ni corrige columnas, delimitadores o codificaciones que no coincidan. Mantén esos ajustes coherentes con los del CSV existente.
- Si el archivo está vacío, escribe el encabezado una vez antes de la primera fila de datos. La comprobación con
tell()anterior usa la posición del archivo abierto en modo de anexado para decidirlo.
Para hacer una comprobación rápida en Python, carga el archivo resultante con pd.read_csv(path) e inspecciona las filas y los nombres de las columnas. Así verificas tanto la tabla interpretada como el texto escrito en el disco.