0Pricing
Pandas & NumPy Academy · Leçon

Filtres isin() et between()

Sélectionnez les lignes dont la valeur d’une colonne appartient à une liste avec isin() ou se trouve dans un intervalle numérique avec between().

Filtres isin() et between() est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Présentation de la méthode isin()

isin() vérifie si chaque élément d’une Series appartient à une liste donnée (ou à un ensemble) de valeurs. Elle renvoie une Series booléenne que vous pouvez utiliser directement pour filtrer les lignes. Cette approche est plus concise et souvent plus rapide que l’enchaînement de plusieurs comparaisons == reliées par |.

Par exemple, au lieu d’écrire (df['country'] == 'USA') | (df['country'] == 'UK'), vous écrivez 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() avec des ensembles pour gagner en vitesse

Vous pouvez transmettre un ensemble Python plutôt qu’une liste à isin(). La recherche d’appartenance dans un ensemble s’effectue en O(1) : elle ne ralentit pas lorsque la liste s’agrandit. Cela est important lorsque la liste des valeurs autorisées contient des milliers d’éléments : isin() avec un ensemble est alors nettement plus rapide qu’avec une liste.

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

Nier isin() avec ~

Combinez isin() avec l’opérateur ~ pour filtrer les lignes dont une colonne ne contient pas les valeurs indiquées. C’est la manière la plus claire d’exclure une liste de valeurs précises, et elle est bien plus lisible que la construction d’un enchaînement de comparaisons !=.

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

Utiliser une colonne de DataFrame comme liste avec isin()

Une astuce puissante consiste à transmettre à isin() les valeurs d’une colonne d’un autre DataFrame. Cela équivaut à une semi-jointure SQL : conserver dans df1 les lignes dont la clé apparaît dans df2. Contrairement à une fusion complète, cette opération ne duplique pas les lignes et n’ajoute pas de colonnes supplémentaires : elle se contente de filtrer.

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

Présentation de la méthode between()

between(left, right) renvoie une Series booléenne qui vaut True lorsque les valeurs se situent dans l’intervalle fermé [left, right] (bornes incluses par défaut). Elle remplace les conditions à deux bornes comme (df['age'] >= 18) & (df['age'] <= 65) par un seul appel lisible.

Le paramètre inclusive contrôle l’inclusion des bornes : 'both' (par défaut), '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() avec le paramètre inclusive

Par défaut, les deux extrémités sont incluses dans l’intervalle. Définir inclusive='left' exclut la borne droite, ce qui est utile pour les intervalles semi-ouverts comme les tranches temporelles ; inclusive='right' exclut la borne gauche ; et inclusive='neither' exclut les deux extrémités pour obtenir un intervalle ouvert strict.

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

Utiliser between() sur des colonnes de dates

between() fonctionne également sur les colonnes datetime. Transmettez des chaînes de date ou des objets Timestamp comme bornes, et Pandas effectuera la comparaison sur les valeurs datetime sous-jacentes. C’est une manière claire de découper une période sans convertir les dates en nombres entiers.

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

Combiner isin() et between()

Vous pouvez combiner isin() et between() dans la même expression booléenne à l’aide de & et |. Vous obtenez ainsi des filtres compacts et lisibles qui nécessiteraient autrement de nombreuses conditions imbriquées. Entourez toujours chaque appel de parenthèses lors de la combinaison.

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

Utiliser isin() sur plusieurs colonnes avec any

Lorsque vous souhaitez vérifier si au moins une de plusieurs colonnes contient une valeur provenant d’une liste, vous pouvez appeler isin() sur l’ensemble du DataFrame et utiliser .any(axis=1) pour réduire le résultat ligne par ligne. Cette technique est utile pour rechercher simultanément dans plusieurs colonnes d’étiquettes ou de catégories.

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

Conseil de performance : isin() ou plusieurs ==

Pour une petite liste de 2 ou 3 valeurs, la différence entre isin() et des conditions == enchaînées est négligeable. En revanche, pour les grandes listes contenant des centaines de valeurs, isin() est nettement plus rapide, car elle convertit la liste en table de hachage en interne et effectue des recherches en O(1) pour chaque élément, au lieu de procéder à des comparaisons séquentielles.

Préférez toujours isin() à un long enchaînement de conditions |, pour obtenir un code plus clair et de meilleures performances.

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)

Filtre concret : catalogue de produits

Voici un exemple réaliste combinant isin() pour filtrer les catégories et between() pour filtrer une plage de prix, une approche courante dans l’analyse du commerce en ligne. Les deux filtres sélectionnent exactement le sous-ensemble de produits nécessaire à une promotion ciblée.

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

Vérification rapide

Vérifiez votre compréhension des filtres isin() et between().

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que isin() vérifie l’appartenance à un ensemble et est plus rapide que l’enchaînement de plusieurs conditions == ; que ~isin() exclut une liste de valeurs ; et que between() filtre un intervalle fermé avec un paramètre inclusive facultatif. Les deux méthodes fonctionnent sur les colonnes numériques, textuelles et datetime. Nous allons maintenant découvrir comment sélectionner les colonnes d’un DataFrame correspondant à un modèle de nommage.

Questions Fréquemment Posées

La leçon « Filtres isin() et between() » est-elle gratuite ?

Oui — le texte complet de « Filtres isin() et between() » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Filtres isin() et between() » ?

Sélectionnez les lignes dont la valeur d’une colonne appartient à une liste avec isin() ou se trouve dans un intervalle numérique avec between(). Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?

Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Filtres isin() et between() » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?

Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Indexation booléenne des DataFrames
  2. La méthode query()
  3. Filtres isin() et between()
  4. Sélectionner des colonnes par motif
← Retour à Pandas & NumPy Academy