HOWTO · Pandas

Escribir un DataFrame de Pandas a CSV

Este tutorial explica cómo podemos escribir un DataFrame en un archivo CSV utilizando la función pandas.DataFrame.to_csv().

En esta página

Este tutorial explica cómo guardar un DataFrame en un archivo CSV con pandas.DataFrame.to_csv(). El método escribe los valores de las columnas como texto delimitado; de forma predeterminada, también escribe el índice del DataFrame como el primer campo de cada fila.

Sintaxis de pandas.DataFrame.to_csv()

La llamada básica recibe una ruta de destino: df.to_csv("midterm.csv"). Para esta tarea, las opciones importantes son index, que permite incluir u omitir las etiquetas de fila; sep, para elegir un delimitador; y encoding, para elegir una codificación de texto. El método ofrece otras opciones para encabezados, columnas, formato y gestión de archivos; consulta la referencia API enlazada si necesitas esos detalles.

Escribir un DataFrame en un archivo CSV

Crea el DataFrame y llama a to_csv() con una ruta; pandas escribirá un archivo separado por comas. Este ejemplo usa las calificaciones de estudiantes y guarda el archivo como midterm.csv. El registro de ejecución suministrado confirma que el ejemplo terminó correctamente, pero no contiene los bytes del archivo, así que el contenido siguiente se indica como esperado.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

mid_term_marks = {
    "Student": ["Kamal", "Arun", "David", "Thomas", "Steven"],
    "Economics": [10, 8, 6, 5, 8],
    "Fine Arts": [7, 8, 5, 9, 6],
    "Mathematics": [7, 3, 5, 8, 5],
}
mid_term_marks_df = pd.DataFrame(mid_term_marks)
mid_term_marks_df.to_csv("midterm.csv")
with open("midterm.csv", encoding="utf-8") as csv_file:
    print(csv_file.read(), end="")

Contenido esperado del archivo (también impreso por el ejemplo):

,Student,Economics,Fine Arts,Mathematics
0,Kamal,10,7,7
1,Arun,8,8,3
2,David,6,5,5
3,Thomas,5,9,8
4,Steven,8,6,5

Como index=True es el valor predeterminado, el encabezado comienza con un campo vacío para el índice y cada fila de datos empieza con su valor de índice. Esos valores son etiquetas del DataFrame, no una de sus columnas con nombre. El archivo se guarda en relación con el directorio de trabajo actual del proceso; usa una ruta absoluta o una ruta adecuada si necesitas indicar un destino específico.

Escribir un DataFrame en CSV sin su índice

Establece index=False cuando el sistema que recibe el archivo espera únicamente las columnas con nombre del DataFrame. Para el ejemplo anterior, mid_term_marks_df.to_csv("midterm.csv", index=False) escribe un encabezado que comienza con Student y filas de datos que empiezan con nombres como Kamal. Esta opción solo cambia si pandas escribe el índice; no elimina ni modifica el índice del DataFrame en memoria. Conserva el valor predeterminado cuando esas etiquetas de fila sean datos relevantes para quien lea el archivo.

Especificar un delimitador al escribir un archivo CSV

El argumento sep establece el separador de campos. Para obtener una salida separada por tabuladores, usa mid_term_marks_df.to_csv("midterm.tsv", index=False, sep="\t"). Los campos resultantes se separan con caracteres de tabulación, no con grupos de espacios; esta diferencia importa cuando otro programa analiza el archivo. La extensión .tsv es una convención útil para los valores separados por tabuladores, mientras que el argumento del delimitador determina el contenido real, independientemente del nombre del archivo.

Gestionar un error de codificación al escribir un archivo CSV

El caso de origen es UnicodeEncodeError, que puede ocurrir cuando el texto contiene caracteres que la codificación seleccionada no puede representar. Especifica una codificación compatible con el texto, como en mid_term_marks_df.to_csv("midterm.csv", encoding="utf-8"), y usa esa misma codificación al leer el archivo con el programa receptor. UTF-8 admite una amplia variedad de texto, pero cambiar la codificación no cambia el delimitador ni omite el índice. El error concreto depende de los datos y de la codificación utilizada, así que el ejemplo anterior muestra una posible solución, no la reproducción de un fallo específico.