Filtrage de données avec Pandas

PandasBeginner
Pratiquer maintenant

Introduction

Bienvenue dans le laboratoire de filtrage de données avec Pandas ! Le filtrage de données est l'une des tâches les plus courantes et essentielles en analyse de données. Il vous permet de sélectionner un sous-ensemble de vos données qui répond à des critères spécifiques, vous permettant ainsi de vous concentrer sur les informations les plus pertinentes pour votre analyse.

Pandas est une bibliothèque Python puissante pour la manipulation et l'analyse de données. Sa structure de données principale, le DataFrame, est une table de données bidimensionnelle avec des lignes et des colonnes. Dans ce laboratoire, vous apprendrez plusieurs techniques fondamentales pour filtrer des lignes d'un DataFrame Pandas. Nous aborderons :

  • Le filtrage avec une seule condition booléenne.
  • La combinaison de plusieurs conditions à l'aide d'opérateurs logiques.
  • L'utilisation de la méthode isin() pour faire correspondre plusieurs valeurs.
  • La suppression des lignes contenant des données manquantes (NaN).
  • Le comptage des résultats de vos données filtrées.

À la fin de ce laboratoire, vous aurez une base solide pour sélectionner et isoler des données dans vos projets Pandas.

Filtrer les lignes avec une condition booléenne

Dans cette étape, vous apprendrez la technique de filtrage la plus basique : l'indexation booléenne. Cette méthode consiste à créer une condition booléenne qui renvoie une série Pandas de valeurs True et False. Lorsque vous passez cette série à un DataFrame, elle renvoie uniquement les lignes où la valeur est True.

Commençons par filtrer notre DataFrame pour trouver tous les employés de plus de 30 ans.

Tout d'abord, ouvrez le fichier main.py dans l'éditeur à gauche. Le fichier a été pré-rempli avec un DataFrame d'exemple.

Maintenant, remplacez les instructions print existantes en bas de main.py par le code suivant. Ce code crée une condition booléenne df['Age'] > 30 et l'utilise pour filtrer le DataFrame.

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

Votre fichier main.py complet devrait maintenant ressembler à ceci :

import pandas as pd
import numpy as np

## Create a sample DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Department': ['HR', 'HR', 'Sales', 'IT', 'IT', 'Finance'],
    'Age': [25, 45, 38, 52, 29, 33],
    'Salary': [50000, 80000, 75000, 95000, 62000, np.nan]
}

df = pd.DataFrame(data)

## Filter for employees older than 30
older_than_30 = df[df['Age'] > 30]

print("Employees older than 30:")
print(older_than_30)

Maintenant, exécutons le script. Ouvrez le terminal et exécutez la commande suivante :

python3 main.py

Vous devriez voir la sortie suivante, qui liste uniquement les employés dont l'âge est supérieur à 30 ans.

Employees older than 30:
      Name Department  Age   Salary
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
5    Frank    Finance   33      NaN

Combiner les filtres avec l'opérateur &

Dans cette étape, nous allons combiner plusieurs conditions pour effectuer un filtrage plus complexe. Vous pouvez combiner des conditions booléennes à l'aide d'opérateurs logiques. Les plus courants sont & pour ET et | pour OU.

Une règle de syntaxe cruciale est que chaque condition doit être entourée de parenthèses () en raison de la précédence des opérateurs en Python.

Filtrons le DataFrame pour trouver les employés qui sont dans le département 'IT' et qui ont plus de 30 ans.

Modifiez votre fichier main.py. Remplacez le code de filtrage de l'étape précédente par le nouveau code ci-dessous.

## Filter for employees in IT and older than 30
it_and_older = df[(df['Department'] == 'IT') & (df['Age'] > 30)]

print("IT employees older than 30:")
print(it_and_older)

Notez comment chaque condition, df['Department'] == 'IT' et df['Age'] > 30, est encapsulée dans son propre ensemble de parenthèses.

Enregistrez le fichier main.py et exécutez-le depuis le terminal :

python3 main.py

La sortie affichera uniquement les employés qui satisfont aux deux conditions. Dans notre jeu de données, seul David correspond à ce critère.

IT employees older than 30:
    Name Department  Age   Salary
3  David         IT   52  95000.0

Utiliser la méthode isin pour la correspondance de valeurs

Dans cette étape, vous apprendrez à filtrer les lignes où la valeur d'une colonne est l'une des plusieurs valeurs possibles. Bien que vous puissiez utiliser plusieurs conditions | (OU), une méthode plus efficace et lisible consiste à utiliser la méthode isin(). Cette méthode prend une liste de valeurs et renvoie True pour chaque ligne où la valeur de la colonne se trouve dans cette liste.

Trouvons tous les employés qui travaillent dans les départements 'HR' ou 'Finance'.

Mettez à jour la logique de filtrage dans votre fichier main.py avec le code suivant :

## Filter for employees in HR or Finance departments
hr_or_finance = df[df['Department'].isin(['HR', 'Finance'])]

print("Employees in HR or Finance:")
print(hr_or_finance)

Ici, isin(['HR', 'Finance']) vérifie quelles lignes de la colonne Department ont une valeur de 'HR' ou 'Finance'.

Enregistrez le fichier et exécutez le script dans le terminal :

python3 main.py

La sortie affichera tous les employés des départements spécifiés.

Employees in HR or Finance:
    Name Department  Age   Salary
0  Alice         HR   25  50000.0
1    Bob         HR   45  80000.0
5  Frank    Finance   33      NaN

Filtrer avec notnull pour supprimer les NaN

Dans cette étape, nous allons aborder la gestion des données manquantes. Dans Pandas, les valeurs manquantes sont généralement représentées par NaN (Not a Number). Il est souvent nécessaire de filtrer les lignes contenant ces valeurs manquantes avant d'effectuer des calculs.

La méthode notnull() renvoie une Series booléenne qui est True pour les valeurs non manquantes et False pour les valeurs manquantes (NaN). Vous pouvez l'utiliser pour supprimer facilement les lignes contenant des NaN dans une colonne spécifique.

Filtrons notre DataFrame pour afficher uniquement les employés pour lesquels nous avons des informations de salaire.

Modifiez le fichier main.py pour utiliser la méthode notnull() sur la colonne Salary.

## Filter out rows with missing Salary
valid_salary = df[df['Salary'].notnull()]

print("Employees with valid salary information:")
print(valid_salary)

Ce code sélectionnera toutes les lignes où la colonne Salary ne contient pas de NaN.

Enregistrez le fichier et exécutez le script dans le terminal :

python3 main.py

Comme vous pouvez le voir dans la sortie, Frank, qui avait un salaire NaN, a été exclu du résultat.

Employees with valid salary information:
      Name Department  Age   Salary
0    Alice         HR   25  50000.0
1      Bob         HR   45  80000.0
2  Charlie      Sales   38  75000.0
3    David         IT   52  95000.0
4      Eve         IT   29  62000.0

Compter les lignes filtrées à l'aide de la fonction len

Dans cette dernière étape, vous apprendrez à compter le nombre de lignes dans un DataFrame filtré. Après avoir appliqué un filtre, vous devez souvent savoir combien de lignes correspondent à vos critères. Une façon simple de le faire est d'utiliser la fonction intégrée len() de Python, qui renvoie le nombre de lignes dans un DataFrame.

Filtrons tous les employés du département 'IT' puis comptons-les.

Mettez à jour votre fichier main.py avec le code suivant. Nous allons d'abord filtrer le DataFrame, puis passer le DataFrame filtré résultant à la fonction len().

## Filter for employees in the IT department
it_employees = df[df['Department'] == 'IT']

## Count the number of IT employees
num_it_employees = len(it_employees)

print(f"Number of employees in IT: {num_it_employees}")

Ce code crée d'abord un nouveau DataFrame it_employees contenant uniquement les lignes du département IT. Ensuite, il calcule la longueur de ce nouveau DataFrame et imprime une chaîne formatée avec le résultat.

Enregistrez le fichier et exécutez le script :

python3 main.py

La sortie sera une seule ligne indiquant le décompte.

Number of employees in IT: 2

Résumé

Félicitations pour avoir terminé le laboratoire de filtrage de données avec Pandas !

Dans ce laboratoire, vous avez appris et pratiqué les techniques essentielles pour sélectionner des sous-ensembles de données à partir d'un DataFrame Pandas. Vous avez couvert :

  • Indexation booléenne : Filtrage des données basé sur une seule condition (par exemple, df[df['Age'] > 30]).
  • Combinaison de filtres : Utilisation de l'opérateur & (ET) pour appliquer plusieurs conditions simultanément, en vous souvenant d'encapsuler chaque condition entre parenthèses.
  • Correspondance de valeurs avec isin() : Filtrage efficace des lignes où la valeur d'une colonne correspond à n'importe quelle valeur d'une liste donnée.
  • Gestion des données manquantes : Utilisation de la méthode notnull() pour supprimer les lignes contenant des valeurs NaN.
  • Comptage des lignes filtrées : Utilisation de la fonction len() pour obtenir le nombre de lignes dans un DataFrame filtré.

Ces compétences de filtrage sont fondamentales pour presque toutes les tâches d'analyse de données. Les maîtriser vous permettra d'explorer et de préparer efficacement vos ensembles de données pour une analyse et une visualisation plus poussées. Continuez à pratiquer ces techniques pour devenir plus compétent avec Pandas.