Pandas & NumPy Academy · Aula

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().

Aula 3 de 413 etapas

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    600

isin() 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   12

Negando 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     500

isin() 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      400

Visã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   45

between() 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     50

between() 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     30

Combinando 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      300

isin() 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     Infra

Dica 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    150

Verificaçã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.

Grátis para começar

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

  1. Indexação booleana em DataFrames
  2. O método query()
  3. Filtros isin() e between()
  4. Selecionando colunas por padrão
← Voltar para Pandas & NumPy Academy