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 600isin() 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 12Nier 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 500Utiliser 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 400Pré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 45between() 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 50Utiliser 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 30Combiner 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 300Utiliser 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 InfraConseil 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 150Vé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
- Indexation booléenne des DataFrames
- La méthode query()
- Filtres isin() et between()
- Sélectionner des colonnes par motif