📄

    Cómo leer un archivo CSV en Python paso a paso

    25 de junio de 20266 min
    csvpandasarchivosprincipiantes

    Leer archivos CSV es una de las tareas más frecuentes en Python. Desde analizar ventas hasta procesar respuestas de formularios, casi cualquier dato del mundo real llega en formato CSV. La buena noticia: Python incluye el módulo csv en la biblioteca estándar, y con pandas puedes hacerlo en una sola línea. En esta guía verás ambas formas, cuándo usar cada una y cómo evitar los errores más típicos.

    Leer un CSV con el módulo csv (sin instalar nada)

    El módulo csv viene incluido en Python. Es la opción correcta cuando no quieres dependencias externas o el archivo es pequeño.

    import csv
    
    with open("ventas.csv", newline="", encoding="utf-8") as archivo:
        lector = csv.reader(archivo)
        for fila in lector:
            print(fila)  # ['Ana', '1200', 'Madrid']
    

    Para acceder por nombre de columna en lugar de por índice, usa DictReader:

    import csv
    
    with open("ventas.csv", newline="", encoding="utf-8") as archivo:
        lector = csv.DictReader(archivo)
        for fila in lector:
            print(fila["nombre"], fila["ventas"])  # Ana 1200
    

    Leer un CSV con pandas (la forma más rápida)

    pandas es la librería estándar para análisis de datos en Python. Si ya la tienes instalada (pip install pandas), leer un CSV es una sola línea:

    import pandas as pd
    
    df = pd.read_csv("ventas.csv")
    print(df.head())        # primeras 5 filas
    print(df.shape)         # (100, 3) → 100 filas, 3 columnas
    print(df["ventas"].sum())  # suma de la columna ventas
    

    pandas infiere automáticamente los tipos de cada columna y gestiona valores vacíos. Para archivos grandes o cuando necesitas filtrar, ordenar o calcular, pandas es siempre la mejor opción.

    Casos de uso reales

    Filtrar filas por condición:

    import pandas as pd
    
    df = pd.read_csv("ventas.csv")
    madrid = df[df["ciudad"] == "Madrid"]
    print(madrid)  # solo las filas donde ciudad es Madrid
    

    Calcular totales por categoría:

    resumen = df.groupby("ciudad")["ventas"].sum()
    print(resumen)
    # Madrid      4500
    # Barcelona   3200
    # Valencia    1800
    

    Guardar el resultado en un CSV nuevo:

    resumen.to_csv("resumen_por_ciudad.csv")
    # Crea el archivo con las ciudades y sus totales
    

    Errores comunes

    Error: el archivo no se encuentra

    # ❌ Incorrecto
    with open("ventas.csv") as f:  # falla si no estás en el directorio correcto
        pass
    

    Solución:

    # ✅ Correcto
    import os
    ruta = os.path.join(os.path.dirname(__file__), "ventas.csv")
    with open(ruta, newline="", encoding="utf-8") as f:
        pass
    

    Error: caracteres extraños en el texto (tildes, ñ)

    # ❌ Incorrecto
    with open("ventas.csv") as f:  # encoding por defecto puede no ser UTF-8
        pass
    

    Solución:

    # ✅ Correcto
    with open("ventas.csv", newline="", encoding="utf-8") as f:
        pass
    # Si el archivo viene de Excel en Windows, prueba encoding="latin-1"
    

    Error: las columnas numéricas se leen como texto con csv.reader

    # ❌ Problema
    fila = ["Ana", "1200"]
    total = fila[1] + 500  # TypeError: can only concatenate str to str
    

    Solución:

    # ✅ Correcto
    total = int(fila[1]) + 500  # 1700
    # Con pandas esto no ocurre — infiere el tipo automáticamente
    

    💡 Practica esto en PythonLingo: Refuerza lo que acabas de leer con los ejercicios interactivos de Listas en Python


    ¿Listo para ir más lejos? Empieza gratis en PythonLingo — ejercicios interactivos, retos diarios y sin instalar nada.

    Preguntas frecuentes

    ¿Necesito instalar algo para leer CSV en Python?

    No. El módulo csv viene incluido en Python y no requiere instalación. Si quieres funcionalidades avanzadas como filtrar o calcular, entonces sí necesitas instalar pandas con pip install pandas.

    ¿Qué diferencia hay entre csv.reader y csv.DictReader?

    csv.reader devuelve cada fila como una lista donde accedes por índice: fila[0], fila[1]. csv.DictReader devuelve cada fila como un diccionario donde accedes por nombre de columna: fila['nombre']. DictReader es más legible cuando el CSV tiene cabeceras.

    ¿Por qué aparecen caracteres extraños al leer un CSV?

    El problema es el encoding. La mayoría de archivos modernos usan UTF-8, pero los archivos generados por Excel en Windows suelen usar latin-1 o cp1252. Prueba añadiendo encoding='utf-8' y si sigue fallando cambia a encoding='latin-1'.

    ¿Puedo leer un CSV desde una URL sin descargarlo?

    Sí, con pandas directamente: pd.read_csv('https://ejemplo.com/datos.csv'). pandas descarga y parsea el archivo en una sola línea. Con el módulo csv necesitarías primero descargar el archivo con urllib o requests.

    ¿Listo para practicar? 🐍

    Pon en práctica lo que aprendiste con ejercicios interactivos.

    Compartir