Filtros isin() y between()
Seleccione filas cuyo valor de columna esté en una lista con isin() o dentro de un rango numérico con between().
Filtros isin() y between() es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
Descripción general del método isin()
isin() comprueba si cada elemento de una Series está contenido en una lista (o conjunto) de valores determinada. Devuelve una Series booleana que puede usar directamente para filtrar filas. Esta solución es más concisa y, a menudo, más rápida que encadenar varias comparaciones == con |.
Por ejemplo, en lugar de (df['country'] == 'USA') | (df['country'] == 'UK'), puede escribir df['country'].isin(['USA', 'UK']).
import pandas as pd
df = pd.DataFrame({
'country': ['USA', 'Germany', 'UK', 'France', 'USA'],
'sales': [400, 200, 150, 300, 600]
})
# Check membership
mask = df['country'].isin(['USA', 'UK'])
print(mask.tolist()) # [True, False, True, False, True]
result = df[mask]
print(result)
# country sales
# 0 USA 400
# 2 UK 150
# 4 USA 600isin() con conjuntos para mejorar la velocidad
Puede pasar un conjunto de Python en lugar de una lista a isin(). La búsqueda de pertenencia en un conjunto tiene un coste O(1): no se vuelve más lenta a medida que crece la lista. Esto es importante cuando la lista de valores permitidos contiene miles de elementos, ya que isin() basado en conjuntos es considerablemente más rápido que isin() basado en listas.
import pandas as pd
df = pd.DataFrame({
'sku': ['A001', 'B002', 'A003', 'C004', 'B005'],
'qty': [10, 5, 3, 8, 12]
})
# Use a set for fast membership check
allowed_skus = {'A001', 'A003', 'B005'}
result = df[df['sku'].isin(allowed_skus)]
print(result)
# sku qty
# 0 A001 10
# 2 A003 3
# 4 B005 12Negación de isin() con ~
Combine isin() con el operador ~ para filtrar las filas en las que una columna no contiene los valores especificados. Esta es la forma más clara de excluir una lista de valores concretos y resulta mucho más legible que crear una cadena de comparaciones !=.
import pandas as pd
df = pd.DataFrame({
'status': ['active', 'cancelled', 'shipped', 'refunded', 'active'],
'amount': [100, 200, 300, 150, 500]
})
bad_statuses = ['cancelled', 'refunded']
# Keep all rows NOT in the excluded list
result = df[~df['status'].isin(bad_statuses)]
print(result)
# status amount
# 0 active 100
# 2 shipped 300
# 4 active 500isin() con una columna de DataFrame como lista
Un recurso muy útil consiste en pasar a isin() los valores de la columna de otro DataFrame. Esto equivale a una combinación semidireccional de SQL: conserva las filas de df1 cuya clave aparece en df2. A diferencia de una combinación completa, no duplica filas ni añade columnas adicionales; solo filtra.
import pandas as pd
orders = pd.DataFrame({
'order_id': [1, 2, 3, 4, 5],
'revenue': [100, 200, 300, 400, 500]
})
vip_orders = pd.DataFrame({'order_id': [2, 4]})
# Keep orders whose ID appears in vip_orders
result = orders[orders['order_id'].isin(vip_orders['order_id'])]
print(result)
# order_id revenue
# 1 2 200
# 3 4 400Descripción general del método between()
between(left, right) devuelve una Series booleana que es True cuando los valores se encuentran dentro del rango cerrado [left, right] (inclusivo de forma predeterminada). Sustituye condiciones de dos extremos como (df['age'] >= 18) & (df['age'] <= 65) por una única llamada legible.
El parámetro inclusive controla la inclusión de los límites: 'both' (valor predeterminado), 'left', 'right' o 'neither'.
import pandas as pd
df = pd.DataFrame({
'age': [15, 22, 35, 67, 45, 8]
})
# Select working-age population
result = df[df['age'].between(18, 65)]
print(result)
# age
# 1 22
# 2 35
# 4 45between() con el parámetro inclusive
De forma predeterminada, ambos extremos están incluidos en el rango. Al establecer inclusive='left', se excluye el límite derecho (resulta útil para intervalos semiabiertos, como los intervalos temporales); con inclusive='right', se excluye el izquierdo; y con inclusive='neither', se excluyen ambos extremos para obtener un intervalo abierto estricto.
import pandas as pd
df = pd.DataFrame({'score': [0, 50, 100, 75, 50]})
# Include only scores strictly between 50 and 100
strict = df[df['score'].between(50, 100, inclusive='neither')]
print(strict)
# score
# 3 75
# Include 50 but not 100
left_closed = df[df['score'].between(50, 100, inclusive='left')]
print(left_closed)
# score
# 1 50
# 3 75
# 4 50between() en columnas de fechas
between() también funciona con columnas de fecha y hora. Pase cadenas de fecha u objetos Timestamp como límites, y Pandas realizará la comparación con los valores de fecha y hora subyacentes. Es una forma clara de seleccionar una ventana temporal sin convertir las fechas en enteros.
import pandas as pd
df = pd.DataFrame({
'date': pd.to_datetime(['2024-01-01', '2024-06-15', '2024-11-20', '2025-03-01']),
'value': [10, 20, 30, 40]
})
# Filter rows in the year 2024
result = df[df['date'].between('2024-01-01', '2024-12-31')]
print(result)
# date value
# 0 2024-01-01 10
# 1 2024-06-15 20
# 2 2024-11-20 30Combinación de isin() y between()
Puede combinar isin() y between() en la misma expresión booleana mediante & y |. Esto crea filtros compactos y legibles que, de otro modo, requerirían muchas condiciones anidadas. Encierre siempre cada llamada entre paréntesis al combinarlas.
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'East', 'North', 'West'],
'revenue': [100, 500, 200, 300, 400]
})
# Rows in North or South regions AND revenue between 200 and 400
result = df[
df['region'].isin(['North', 'South']) &
df['revenue'].between(200, 400)
]
print(result)
# region revenue
# 3 North 300
# 1 South 500 <- actually excluded (500 > 400)
# 3 North 300isin() en varias columnas con Any
Cuando quiera comprobar si alguna de varias columnas contiene un valor de una lista, puede llamar a isin() en todo el DataFrame y usar .any(axis=1) para consolidar el resultado por filas. Esto resulta útil para buscar simultáneamente en varias columnas de etiquetas o categorías.
import pandas as pd
df = pd.DataFrame({
'tag1': ['python', 'java', 'sql'],
'tag2': ['sql', 'python', 'go'],
'topic': ['Database', 'Backend', 'Infra']
})
target_langs = ['python', 'sql']
# Check if either tag column matches
mask = df[['tag1', 'tag2']].isin(target_langs).any(axis=1)
result = df[mask]
print(result)
# tag1 tag2 topic
# 0 python sql Database
# 1 java python Backend
# 2 sql go InfraConsejo de rendimiento: isin() frente a varios ==
Para una lista pequeña de 2 o 3 valores, la diferencia entre isin() y las condiciones == encadenadas es insignificante. Sin embargo, para listas grandes (de cientos de valores), isin() es mucho más rápido porque convierte internamente la lista en un conjunto hash y realiza búsquedas O(1) por elemento, en lugar de comparaciones secuenciales.
Prefiera siempre isin() a una cadena larga de condiciones | para obtener un código más limpio y un mejor rendimiento.
import pandas as pd
import numpy as np
# 1 million row DataFrame
df = pd.DataFrame({'id': np.random.randint(0, 10000, size=1_000_000)})
allowed = list(range(0, 500)) # 500 allowed IDs
# isin() is the right approach here — fast hash lookup
result = df[df['id'].isin(allowed)]
print(result.shape) # around (50000, 1)Filtro de un caso real: catálogo de productos
A continuación se muestra un ejemplo realista que combina isin() para filtrar por categoría y between() para filtrar por rango de precios, un patrón habitual en el análisis de comercio electrónico. Los dos filtros seleccionan exactamente el subconjunto de productos necesario para una promoción específica.
import pandas as pd
products = pd.DataFrame({
'name': ['Laptop', 'Mouse', 'Monitor', 'Keyboard', 'Webcam'],
'category': ['Computing', 'Accessories', 'Displays', 'Accessories', 'Peripherals'],
'price': [1200, 25, 300, 80, 150]
})
# Products in Accessories or Peripherals, priced 50-200
eligible = products[
products['category'].isin(['Accessories', 'Peripherals']) &
products['price'].between(50, 200)
]
print(eligible)
# name category price
# 3 Keyboard Accessories 80
# 4 Webcam Peripherals 150Comprobación rápida
Compruebe cuánto comprende de los filtros isin() y between().
Resumen de la lección
En esta lección ha aprendido que isin() comprueba la pertenencia a un conjunto y es más rápido que encadenar varias condiciones ==; ~isin() excluye una lista de valores; y between() filtra un rango cerrado con un parámetro inclusive opcional. Ambos métodos funcionan con columnas numéricas, de cadenas y de fecha y hora. A continuación, exploraremos cómo seleccionar columnas de un DataFrame que coincidan con un patrón de nombre.
Preguntas frecuentes
¿La lección «Filtros isin() y between()» es gratis?
Sí — el texto completo de «Filtros isin() y between()» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Filtros isin() y between()»?
Seleccione filas cuyo valor de columna esté en una lista con isin() o dentro de un rango numérico con between(). Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Filtros isin() y between()»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Indexación booleana en DataFrames
- El método query()
- Filtros isin() y between()
- Seleccionar columnas por patrón