Selección de datos en Pandas (loc / iloc / at)

La selección de datos es una de las operaciones más comunes en Pandas. Comprenderloc、iloc、atlas diferencias y los escenarios de aplicación te permitirán manejar los datos de manera más eficiente.


Diferencia entre loc e iloc

Característica loc iloc
Método de indexación Indexación por etiqueta (basada en etiquetas) Indexación por posición (basada en enteros)
Slicing Incluye la posición final Excluye la posición final
Valor único Devuelve un escalar Devuelve un escalar
Escenario recomendado Cuando hay etiquetas de índice explícitas Cuando se selecciona por posición

Ejemplo

import pandas as pd

# Crear un DataFrame de ejemplo
df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu, "Zhao Liu", "Qian Qi"],
    "Edad": [25, 30, 28, 35, 22],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou", "Shenzhen", "Hangzhou"]
}, index=[1, 3, 5, 7, 9])  # Nota: los índices no son continuos

print("DataFrame:")
print(df)
print()

# loc: usar índice por etiqueta (incluye la posición final)
print(df.loc[1:5] (rebanada por etiqueta, incluye 5):)
print(df.loc[1:5])
print()

# iloc: usar índice por posición (no incluye la posición final)
print(df.iloc[0:2] (rebanada por posición, no incluye 2):)
print(df.iloc[0:2])

Uso de loc

Seleccionar filas

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu, "Zhao Liu"],
    "Edad": [25, 30, 28, 35],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou", "Shenzhen"]
}, index=["a", "b", "c", "d"])

# Seleccionar una sola fila (devuelve una Serie)
print(Seleccionar una fila:)
print(df.loc["a"])
print()

# Seleccionar varias filas
print(Seleccionar varias filas:)
print(df.loc[["a", "c"]])
print()

# Selección por rebanada (incluye inicio y fin)
print(Selección por rebanada:)
print(df.loc["a":"c"])

Seleccionar columnas

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu],
    "Edad": [25, 30, 28],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou"]
}, index=["a", "b", "c"])

# Seleccionar una sola columna
print(Seleccionar una sola columna:)
print(df.loc[:, "Nombre"])
print()

# Seleccionar varias columnas
print(Seleccionar varias columnas:)
print(df.loc[:, ["Nombre", "Ciudad"]])
print()

# Seleccionar columnas por rebanada
print(Seleccionar columnas por rebanada:)
print(df.loc[:, "Nombre":"Ciudad"])

Seleccionar filas y columnas específicas (método recomendado)

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu, "Zhao Liu"],
    "Edad": [25, 30, 28, 35],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou", "Shenzhen"]
}, index=["a", "b", "c", "d"])

# Seleccionar filas y columnas específicas
print(Seleccionar un solo valor:)
print(df.loc["a", "Nombre"])  # Devuelve "张三"
print(type(df.loc["a", "Nombre"]))  # El tipo es str
print()

# Seleccionar varias filas y columnas
print(Seleccionar subconjunto:)
print(df.loc[["a", "c"], ["Nombre", "Ciudad"]])
print()

# Selección condicional
print(Filas con edad mayor que 28:)
print(df.loc[df["Edad"] > 28])

Uso de iloc

Seleccionar por posición

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu, "Zhao Liu"],
    "Edad": [25, 30, 28, 35],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou", "Shenzhen"]
})

# Seleccionar la fila 0
print(Seleccionar la fila 0:)
print(df.iloc[0])
print()

# Seleccionar las primeras 3 filas
print(Seleccionar las primeras 3 filas:)
print(df.iloc[:3])
print()

# Seleccionar filas específicas
print(Seleccionar filas específicas:)
print(df.iloc[[0, 2, 3]])
print()

# Índices negativos (desde el final)
print(Seleccionar la última fila:)
print(df.iloc[-1])
print()

print(Seleccionar las últimas 3 filas:)
print(df.iloc[-3:])

Seleccionar columnas

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu],
    "Edad": [25, 30, 28],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou"]
})

# Seleccionar la columna 0
print(Columna 0:)
print(df.iloc[:, 0])
print()

# Seleccionar las columnas 1 y 2
print(Seleccionar varias columnas:)
print(df.iloc[:, [1, 2]])
print()

# Selección por rebanada
print(Seleccionar columnas por rebanada:)
print(df.iloc[:, 0:2])

at e iat (obtener un valor único)

atyiatson accesores especializados para obtener/establecer un solo valor, en comparación conlocyiloc>更快。

Ejemplo

import pandas as pd
import time
import numpy as np

# Crear un DataFrame grande para pruebas de rendimiento
df = pd.DataFrame(np.random.randn(1000, 10), columns=[f"col_{i}" for i in range(10)])

# at obtiene un solo valor (índice por etiqueta)
print(f"at: {df.at[0, 'col_0']}")

# iat obtiene un solo valor (índice por posición)
print(f"iat: {df.iat[0, 0]}")

# Comparación de rendimiento
n = 10000

start = time.time()
for _ in range(n):
    _ = df.iloc[0, 0]
print(f"iloc tiempo transcurrido: {time.time() - start:.4f}s")

start = time.time()
for _ in range(n):
    _ = df.iat[0, 0]
print(fDuración de iat: {time.time() - start:.4f}s)

Selección condicional

Usar condiciones booleanas para filtrar datos es una de las operaciones más comunes.

Ejemplo

import pandas as pd

df = pd.DataFrame({
    "Nombre": ["Zhang San", "Li Si", Wang Wu, "Zhao Liu"],
    "Edad": [25, 30, 28, 35],
    "Ciudad": ["Pekín", Shanghái, "Guangzhou", "Pekín"],
    "Salario": [12000, 15000, 11000, 18000]
})

# Condición única
print(Empleados con edad mayor que 28:)
print(df[df["Edad"] > 28])
print()

# Múltiples condiciones (usando & | ~)
print(Beijing y salario mayor que 12000:)
print(df[(df["Ciudad"] == "Pekín") & (df["Salario"] > 12000)])
print()

# Filtro con isin
print(La ciudad es Beijing o Shanghái:)
print(df[df["Ciudad"].isin(["Pekín", Shanghái])])
print()

# Coincidencia en cadena
print(El nombre contiene '三':)
print(df[df["Nombre"].str.contains("tres")])

Notas

1. El rebanado incluye la posición final

locel rebanado incluye la posición final,ilocno incluye.

2. Si el índice no existe, se produce un error

Al usarlocsi el índice no existe, se lanzará KeyError; se puede usarloc[index_list]junto conreindex。

3. Se recomienda usar preferentementeloc

porquelocMás legible y menos propenso a errores, a menos que sea necesario seleccionar por posición.

at/iatEs la forma más rápida de acceder a un solo valor,loc/ilocSe utiliza para seleccionar múltiples valores. Elegir el método adecuado puede mejorar el rendimiento y la legibilidad del código.

Otras extensiones