HOWTO · Pandas

Appliquer la fonction à chaque ligne dans Pandas DataFrame

Ce didacticiel montre comment utiliser la fonction d'application de Pandas à chaque ligne de DataFrame et comment appliquer différentes fonctions en tant qu'argument, telles que l'utilisation des fonctions lambda, numpy et définies par l'utilisateur à chaque ligne.

Sur cette page

Utilisez DataFrame.apply() avec axis=1 pour transmettre chaque ligne à une fonction appelable. Celle-ci peut renvoyer une ligne transformée, que apply() rassemble dans un DataFrame. Ce guide présente le choix de l’axe pour traiter les lignes, une fonction lambda, une fonction NumPy et des fonctions définies par l’utilisateur, avec ou sans arguments supplémentaires.

Syntaxe de base de la fonction apply() de Pandas

La forme générale est dataframe.apply(function, axis=1, args=()). Définissez axis=1 lorsque la fonction doit recevoir les lignes. La valeur par défaut est axis=0, qui transmet les colonnes. Lors d’un appel ligne par ligne, la fonction reçoit une Series dont l’index contient les noms des colonnes ; sa valeur de retour détermine le résultat. Si chaque ligne renvoie une valeur scalaire, le résultat est une Series ; si chaque ligne renvoie une Series avec des étiquettes cohérentes, le résultat est un DataFrame.

args fournit des arguments positionnels supplémentaires après la ligne. Utilisez-le lorsqu’une fonction personnalisée a besoin d’une valeur identique pour toutes les lignes. Pour consulter la liste complète des paramètres, voir DataFrame.apply().

Appliquer une fonction lambda à chaque ligne d’un DataFrame Pandas

Une fonction lambda convient aux transformations courtes. Cet exemple ajoute 10 à chaque valeur de la ligne et renvoie un DataFrame avec les mêmes colonnes. Pour une logique plus longue, une fonction nommée est plus facile à lire et à réutiliser.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

dataframe = pd.DataFrame([(1, 34, 23), (11, 31, 11)], columns=list("ABC"))
result = dataframe.apply(lambda row: row + 10, axis=1)
print(result)
    A   B   C
0  11  44  33
1  21  41  21

Appliquer une fonction NumPy à chaque ligne d’un DataFrame Pandas

Transmettez directement une fonction NumPy lorsqu’elle s’applique à chaque valeur de la ligne. Ici, np.sqrt transforme chaque cellule numérique, puis apply() rassemble les lignes transformées. La racine carrée convient aux valeurs numériques non négatives ; choisissez une autre opération si les données sont d’un autre type ou si le domaine impose d’autres contraintes.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import numpy as np
import pandas as pd

dataframe = pd.DataFrame([(4, 9, 16), (25, 36, 49)], columns=list("ABC"))
result = dataframe.apply(np.sqrt, axis=1)
print(result)
     A    B    C
0  2.0  3.0  4.0
1  5.0  6.0  7.0

Appliquer à chaque ligne d’un DataFrame Pandas une fonction définie par l’utilisateur avec des arguments

Définissez la transformation de ligne dans une fonction lorsqu’elle dépasse une courte expression. Dans cet exemple, row est le premier argument et 2 est transmis ensuite via args ; la fonction double chaque valeur. args doit être un tuple d’arguments positionnels : pour une seule valeur supplémentaire, écrivez (2,).

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

def multiply_row(row, factor):
    return row * factor

dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_row, axis=1, args=(2,))
print(result)
   A   B   C
0  4   6   8
1  6  10  20

Appliquer à chaque ligne d’un DataFrame Pandas une fonction définie par l’utilisateur sans arguments

Lorsque l’opération ne nécessite aucun paramètre commun, définissez la fonction avec le seul paramètre de ligne et transmettez-la directement. Cet exemple multiplie chaque valeur de ligne par quatre. Les lignes renvoyées conservent leurs étiquettes ; le résultat est donc un DataFrame avec les colonnes d’origine.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

def multiply_by_four(row):
    return row * 4

dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_by_four, axis=1)
print(result)
    A   B   C
0   8  12  16
1  12  20  40

Utilisez apply() lorsque l’opération nécessite une fonction qui traite une ligne entière. Pour une opération arithmétique simple appliquée colonne par colonne, une expression vectorisée directe peut être plus lisible et éviter les appels Python ligne par ligne.