Filtros isin() e between()
Selecione linhas cujo valor de coluna esteja em uma lista com isin() ou dentro de um intervalo numérico com between().
Filtros isin() e between() é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
Visão geral do método isin()
isin() verifica se cada elemento de uma Series está contido em uma determinada lista (ou conjunto) de valores. Ele retorna uma Series booleana que pode ser usada diretamente para filtrar linhas. Essa abordagem é mais concisa e geralmente mais rápida do que encadear várias comparações == com |.
Por exemplo, em vez de (df['country'] == 'USA') | (df['country'] == 'UK'), escreva 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() com conjuntos para obter mais velocidade
Você pode passar um conjunto do Python em vez de uma lista para isin(). A busca de pertencimento em um conjunto tem complexidade O(1) — ela não fica mais lenta à medida que a lista cresce. Isso é importante quando sua lista de valores permitidos tem milhares de entradas, tornando isin() baseado em conjuntos significativamente mais rápido do que isin() baseado em 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 12Negando isin() com ~
Combine isin() com o operador ~ para filtrar linhas em que uma coluna não contém os valores especificados. Essa é a maneira mais clara de excluir uma lista de valores específicos, sendo muito mais legível do que criar uma sequência de comparações !=.
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() usando uma coluna de DataFrame como lista
Um recurso poderoso é passar os valores da coluna de outro DataFrame para isin(). Isso equivale a uma semi-junção do SQL: mantém no df1 as linhas cuja chave aparece no df2. Diferentemente de uma mesclagem completa, isso não duplica linhas nem adiciona colunas extras — apenas 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 400Visão geral do método between()
between(left, right) retorna uma Series booleana que é True onde os valores estão dentro do intervalo fechado [left, right] (inclusivo por padrão). Ele substitui condições de dois lados, como (df['age'] >= 18) & (df['age'] <= 65), por uma única chamada legível.
O parâmetro inclusive controla a inclusão dos limites: 'both' (padrão), 'left', 'right' ou '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() com o parâmetro inclusive
Por padrão, os dois extremos são incluídos no intervalo. Definir inclusive='left' exclui o limite direito (útil para intervalos semiabertos, como faixas de tempo); inclusive='right' exclui o limite esquerdo; e inclusive='neither' exclui os dois extremos, criando um intervalo aberto estrito.
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() em colunas de data
between() também funciona em colunas de data e hora. Passe strings de data ou objetos Timestamp como limites, e o Pandas fará a comparação usando os valores de data e hora subjacentes. Essa é uma maneira clara de recortar uma janela de tempo sem converter as datas em números inteiros.
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 30Combinando isin() e between()
Você pode combinar isin() e between() na mesma expressão booleana usando & e |. Isso cria filtros compactos e legíveis que, de outra forma, exigiriam muitas condições aninhadas. Sempre coloque cada chamada entre parênteses ao fazer combinações.
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() em várias colunas com any
Quando quiser verificar se qualquer uma de várias colunas contém um valor de uma lista, você pode chamar isin() no DataFrame inteiro e usar .any(axis=1) para condensar o resultado por linha. Isso é útil para pesquisar simultaneamente em várias colunas de tags ou categorias.
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 InfraDica de desempenho: isin() versus vários ==
Para uma lista pequena, com 2 ou 3 valores, a diferença entre isin() e condições == encadeadas é insignificante. Porém, para listas grandes (com centenas de valores), isin() é muito mais rápido porque converte a lista internamente em um conjunto hash e faz buscas O(1) por elemento, em vez de comparações sequenciais.
Prefira sempre isin() a uma longa sequência de condições | para obter um código mais limpo e melhor desempenho.
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 do mundo real: catálogo de produtos
Aqui está um exemplo realista que combina isin() para filtrar categorias e between() para filtrar uma faixa de preços — um padrão comum em análises de comércio eletrônico. Juntos, os dois filtros selecionam exatamente o subconjunto de produtos necessário para uma promoção direcionada.
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 150Verificação rápida
Teste sua compreensão dos filtros isin() e between().
Resumo da lição
Nesta lição, você aprendeu que: isin() verifica o pertencimento a um conjunto e é mais rápido do que encadear várias condições ==; ~isin() exclui uma lista de valores; e between() filtra um intervalo fechado com um parâmetro inclusive opcional. Ambos os métodos funcionam em colunas numéricas, de strings e de data e hora. A seguir, exploraremos como selecionar colunas de um DataFrame que correspondam a um padrão de nome.
Aprenda Python com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Filtros isin() e between()” é grátis?
Sim — o texto completo de “Filtros isin() e between()” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Filtros isin() e between()”?
Selecione linhas cujo valor de coluna esteja em uma lista com isin() ou dentro de um intervalo numérico com between(). Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Filtros isin() e between()”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Indexação booleana em DataFrames
- O método query()
- Filtros isin() e between()
- Selecionando colunas por padrão