Una vez que tienes un DataFrame cargado, la operación más frecuente es seleccionar solo los datos que necesitas: ciertas columnas, ciertas filas, o una combinación de ambas. pandas tiene varias formas de hacer esto.
Seleccionar columnas
import pandas as pd
df = pd.DataFrame({
'nombre': ['Ana', 'Carlos', 'María', 'Luis'],
'edad': [28, 35, 42, 29],
'ciudad': ['Santiago', 'Lima', 'Bogotá', 'CDMX'],
'salario': [3000, 2800, 4500, 3200]
})
# Una columna → Serie
print(df['nombre'])
# Varias columnas → DataFrame
print(df[['nombre', 'salario']])
Filtrar filas por condición
# Mayores de 30
mayores = df[df['edad'] > 30]
# Ciudad específica
santiago = df[df['ciudad'] == 'Santiago']
# Múltiples condiciones con & (and) y | (or)
filtro = df[(df['edad'] > 28) & (df['salario'] > 3000)]
# Negación con ~
no_lima = df[~(df['ciudad'] == 'Lima')]
Importante: cuando combinas condiciones, cada una va entre paréntesis.
loc: seleccionar por etiqueta
loc selecciona por nombre de índice y nombre de columna:
# Fila con índice 0, todas las columnas
print(df.loc[0])
# Filas 0 a 2, columnas 'nombre' y 'salario'
print(df.loc[0:2, ['nombre', 'salario']])
# Filtro con loc
print(df.loc[df['salario'] > 3000, ['nombre', 'salario']])
iloc: seleccionar por posición numérica
iloc selecciona por posición (como los índices de una lista):
# Primera fila
print(df.iloc[0])
# Primeras 2 filas, primeras 3 columnas
print(df.iloc[0:2, 0:3])
# Última fila
print(df.iloc[-1])
isin: filtrar por lista de valores
ciudades_latam = ['Santiago', 'Lima', 'Bogotá']
df_latam = df[df['ciudad'].isin(ciudades_latam)]
str.contains: filtrar texto parcial
# Nombres que empiecen con "A" o "C"
df_ac = df[df['nombre'].str.startswith(('A', 'C'))]
# Ciudad que contenga "o"
df_o = df[df['ciudad'].str.contains('o', case=False)]
Ejemplo completo
# Empleados de más de 30 años, salario mayor a 3000, solo nombre y salario
resultado = df.loc[
(df['edad'] > 30) & (df['salario'] > 3000),
['nombre', 'salario']
]
print(resultado)
Errores frecuentes
Usar and en lugar de &: df[condicion1 and condicion2] da error. Debes usar & para AND y | para OR, con cada condición entre paréntesis.
Confundir loc e iloc: loc usa etiquetas (nombres), iloc usa posiciones numéricas. Si el índice de tu DataFrame es numérico, pueden dar resultados similares pero son conceptualmente distintos.
SettingWithCopyWarning: cuando filtras y luego modificas el resultado, pandas puede advertir que estás modificando una copia. Usa .copy(): subdf = df[filtro].copy().
Aprende haciendo, no solo leyendo
Leer es el primer paso. El verdadero aprendizaje ocurre cuando practicas con ejercicios reales de SQL y recibes corrección inmediata de IA.
Comenzar gratis →