Skip to content

Cómo buscar fácilmente valores en una columna de un DataFrame de Pandas

Updated on

Buscar valores en una columna de un DataFrame de Pandas es una operación fundamental para filtrar, limpiar y analizar datos. Pandas ofrece muchas formas potentes de búsqueda —incluyendo indexación booleana, isin(), query() y operaciones de cadenas— que hacen esta tarea rápida e intuitiva.

Esta guía actualizada cubre las técnicas más útiles y modernas para buscar valores en un DataFrame, junto con ejemplos que puedes aplicar directamente en flujos de trabajo reales.

¿Quieres crear visualizaciones de datos a partir de DataFrames de Pandas sin escribir código?
PyGWalker convierte tu DataFrame en una interfaz interactiva tipo Tableau dentro de Jupyter Notebook.
PyGWalker en GitHub (opens in a new tab)

PyGWalker for Data visualization (opens in a new tab)


Conceptos básicos de DataFrame de Pandas

Un DataFrame de Pandas es una estructura tabular bidimensional con filas y columnas etiquetadas. Aquí tienes un ejemplo sencillo:

import pandas as pd
 
data = {
    'Name': ['John', 'Emma', 'Peter', 'David', 'Sophie'],
    'Age': [27, 21, 24, 30, 29],
    'Gender': ['Male', 'Female', 'Male', 'Male', 'Female'],
    'City': ['New York', 'London', 'Paris', 'Tokyo', 'Rio de Janeiro']
}
 
df = pd.DataFrame(data)
print(df)

Salida:

     Name  Age  Gender             City
0    John   27    Male         New York
1    Emma   21  Female           London
2   Peter   24    Male            Paris
3   David   30    Male            Tokyo
4  Sophie   29  Female  Rio de Janeiro

Búsqueda de valores en una columna de un DataFrame

1. Buscar una coincidencia exacta (indexación booleana)

result = df[df['Age'] == 27]
print(result)

Salida:

   Name  Age Gender      City
0  John   27   Male  New York

Puedes usar cualquier operador de comparación:

OperadorSignificado
==igual
!=distinto
> / <mayor / menor
>= / <=mayor o igual / menor o igual

Ejemplo: encontrar filas donde Age ≥ 25

df[df['Age'] >= 25]

2. Buscar múltiples valores usando isin()

cities = ['Paris', 'Tokyo']
df[df['City'].isin(cities)]

Salida:

    Name  Age Gender   City
2  Peter   24   Male  Paris
3  David   30   Male  Tokyo

Usa ~df['col'].isin() para excluir valores.


3. Buscar usando query() (legible y rápido)

query() te permite filtrar filas usando una sintaxis similar a SQL, ideal para la legibilidad.

df.query("Age == 27")

O varias condiciones:

df.query("Age > 25 and Gender == 'Female'")

A menudo esto da lugar a un código más limpio que la indexación booleana anidada.


4. Buscar patrones de texto (str.contains())

Es útil para filtrar columnas de texto.

Contiene una subcadena

df[df['City'].str.contains('on', case=False, na=False)]

Empieza o termina con

df[df['Name'].str.startswith('J')]
df[df['City'].str.endswith('o')]

5. Buscar valores faltantes / no faltantes

df[df['City'].isna()]      # valores faltantes
df[df['City'].notna()]     # valores no faltantes

6. Buscar en varias columnas

Encontrar filas donde cualquier columna coincida con un valor:

df[df.eq('Male').any(axis=1)]

Encontrar filas donde todas las condiciones se cumplan:

df[(df['Gender'] == 'Female') & (df['Age'] > 25)]

Consejos de rendimiento (realistas y precisos)

Algunos consejos de rendimiento se malinterpretaron en tutoriales antiguos.
Aquí tienes recomendaciones correctas:

✔ 1. Convierte columnas a category si tienen muchos valores repetidos

Esto acelera las comparaciones:

df['City'] = df['City'].astype('category')

✔ 2. Usa arrays de NumPy para conjuntos de datos muy grandes

import numpy as np
 
ages = df['Age'].to_numpy()
df[ages == 27]

✔ 3. Evita apply() para búsquedas

Las operaciones vectorizadas (indexación booleana, isin(), query()) son siempre más rápidas.

❌ Eliminado: “.loc[] es más rápido que la indexación booleana”

Esto es incorrecto: se comportan igual internamente.
.loc[] se usa para selección basada en etiquetas, no como mejora de velocidad.

⚠ Sobre searchsorted()

searchsorted() solo funciona correctamente si la columna está ordenada y no confirma que el valor exista.
Por ejemplo:

df_sorted = df.sort_values('Age')
idx = df_sorted['Age'].searchsorted(27)

Esto encuentra la posición de inserción, no necesariamente la fila con Age = 27.

Úsalo solo para flujos de trabajo avanzados.


Conclusión

Buscar valores en una columna de Pandas es esencial para la exploración y limpieza de datos. Pandas ofrece muchas formas eficientes de búsqueda:

  • Indexación booleana para coincidencias exactas
  • isin() para múltiples valores
  • query() para filtrado limpio, similar a SQL
  • Búsqueda de texto con str.contains()
  • Filtrado de valores faltantes
  • Filtrado en múltiples columnas

Estos métodos te ayudan a extraer rápidamente y con precisión exactamente los datos que necesitas.


Enlaces


Preguntas frecuentes

  1. ¿Cómo busco un valor específico en una columna de un DataFrame?
    Usa indexación booleana:

    df[df['Age'] == 27]
  2. ¿Cómo obtengo un valor específico de una columna?
    Usa índice de fila + nombre de columna:

    df['Age'][0]
  3. ¿Cómo obtengo un único valor de forma rápida?
    Usa .at o .iat:

    df.at[0, 'Age']
    df.iat[0, 1]

;