loc vs iloc en pandas: diferencias y ejemplos

Selección de celdas por etiquetas y posiciones en un DataFrame

Entender loc vs iloc en pandas evita selecciones incorrectas y errores silenciosos. Ambos indexadores permiten elegir filas y columnas de un DataFrame, pero loc trabaja con etiquetas y condiciones, mientras iloc trabaja con posiciones enteras. La elección debe reflejar si tu regla depende de la identidad de los datos o de su ubicación actual.

DataFrame de ejemplo

import pandas as pd

ventas = pd.DataFrame(
    {
        "producto": ["A", "B", "C"],
        "importe": [120, 85, 210],
        "region": ["Norte", "Sur", "Norte"],
    },
    index=["v101", "v102", "v103"],
)

El índice contiene etiquetas de negocio y las columnas también tienen nombres.

Seleccionar con loc

loc usa etiquetas:

ventas.loc["v102"]
ventas.loc["v101":"v103", ["producto", "importe"]]

El corte con etiquetas incluye ambos extremos si están presentes. Esta es una diferencia importante respecto a los cortes posicionales de Python.

loc también acepta una máscara booleana:

ventas.loc[ventas["importe"] >= 100, ["producto", "importe"]]

Esta combinación expresa bien reglas como “filas que cumplen una condición y columnas concretas”.

Seleccionar con iloc

iloc usa posiciones basadas en cero:

ventas.iloc[0]
ventas.iloc[0:2, 0:2]
ventas.iloc[[0, 2], [0, 1]]

El corte 0:2 incluye las posiciones 0 y 1, pero excluye 2, igual que un range. iloc es apropiado cuando necesitas “las primeras diez filas”, “la última columna” o una selección por posiciones calculadas.

Filas y columnas al mismo tiempo

La sintaxis general es indexador[filas, columnas]. Con loc, ambas partes son etiquetas o condiciones; con iloc, ambas son posiciones. Mezclarlas provoca errores o resultados diferentes de lo esperado.

Para obtener un único escalar, at y iat son alternativas especializadas: at utiliza etiquetas e iat posiciones. Pueden comunicar mejor que esperas exactamente una celda.

El índice entero puede confundir

Si el DataFrame tiene un índice [10, 20, 30], loc[10] busca la etiqueta 10 e iloc[10] intenta acceder a la undécima fila. No interpretes automáticamente un entero como posición.

Después de filtrar o importar datos, revisa df.index. Si realmente quieres un índice consecutivo, reset_index puede crearlo, pero no descartes un identificador relevante solo para simplificar una selección.

Asignar valores de forma segura

loc es la herramienta recomendada para actualizar según una condición:

ventas.loc[ventas["importe"] >= 200, "segmento"] = "alto"

Evita encadenar selecciones como ventas[condicion]["segmento"] = valor. Esa forma puede operar sobre una copia y generar advertencias o no modificar el objeto esperado. Realiza la selección y la asignación en una única operación loc.

Máscaras y alineación por índice

Una Serie booleana usada con loc se alinea por etiquetas. Esto es potente, pero requiere que su índice corresponda al DataFrame. iloc espera posiciones y no ofrece esa misma semántica de alineación.

Cuando una máscara procede de otro objeto, comprueba índices, longitud y valores ausentes. Un filtro aparentemente correcto puede quedar desordenado si se ignora la alineación.

Índices duplicados

loc con una etiqueta duplicada puede devolver varias filas. No asumas un escalar sin confirmar que el índice es único:

ventas.index.is_unique

Si la unicidad es una regla de negocio, valídala al cargar los datos. Si los duplicados son legítimos, diseña el código para recibir una Serie o un DataFrame según el resultado.

Rendimiento y legibilidad

No elijas iloc por una supuesta ventaja universal de velocidad. Selecciona el indexador que representa la intención y mide solo cuando el volumen lo justifique. Reducir columnas temprano puede ahorrar memoria; ejecutar bucles fila por fila normalmente cuesta más que una operación vectorizada.

Regla práctica

Usa loc cuando conoces nombres de filas o columnas, trabajas con máscaras o quieres asignar según condiciones. Usa iloc cuando la regla dice primero, último, intervalo o posición. Documenta los casos sensibles y agrega pruebas con índices no consecutivos: así descubrirás dependencias accidentales del orden.

Continúa aprendiendo

Amplía este tema con nuestras guías sobre pandas concat, limpieza de datos, valores nulos en pandas.

Fuentes oficiales

Preguntas frecuentes

¿Cuál es la diferencia principal entre loc e iloc?
loc selecciona mediante etiquetas y condiciones; iloc selecciona mediante posiciones enteras basadas en cero.

¿loc incluye el extremo final de un corte?
En un corte por etiquetas suele incluir ambos extremos presentes. iloc sigue la convención posicional y excluye el extremo final.

¿Cómo actualizo filas que cumplen una condición?
Utiliza loc con una máscara booleana y la columna en una única asignación para evitar selecciones encadenadas.

¿Qué ocurre si el índice contiene números?
loc interpreta el número como etiqueta; iloc lo interpreta como posición. Son significados distintos aunque ambos valores sean enteros.

¿Para qué sirven at e iat?
Para acceder a una sola celda: at mediante etiquetas e iat mediante posiciones.

¿Qué pasa con loc si hay índices duplicados?
Puede devolver varias filas para la misma etiqueta. Comprueba la unicidad si tu lógica espera un único registro.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir