Appliquer la fonction à chaque ligne dans Pandas DataFrame

Samreena Aslam 30 janvier 2023
  1. Syntaxe de base de la fonction apply() de Pandas
  2. Appliquer la fonction lambda à chaque ligne dans le Pandas DataFrame
  3. Appliquer une fonction NumPy à chaque ligne de Pandas DataFrame
  4. Appliquer une fonction définie par l’utilisateur à chaque ligne de Pandas DataFrame avec des arguments
  5. Appliquer une fonction définie par l’utilisateur à chaque ligne de Pandas DataFrame sans arguments
Appliquer la fonction à chaque ligne dans Pandas DataFrame

Pandas est une bibliothèque python, qui fournit une liste énorme de classes et de fonctions pour effectuer plus facilement des tâches d’analyse et de manipulation de données. Nous manipulons les données dans le DataFrame des pandas sous forme de lignes et de colonnes. Par conséquent, la plupart du temps, nous devons appliquer des fonctions appropriées à chaque ligne ou colonne pour obtenir les résultats souhaités.

Cet article explorera comment utiliser les pandas pour appliquer une fonction à chaque ligne du Pandas DataFrame. De plus, nous montrerons comment appliquer diverses fonctions telles que la fonction lambda, une fonction définie par l’utilisateur et la fonction NumPy à chaque ligne d’un DataFrame pandas.

Syntaxe de base de la fonction apply() de Pandas

La syntaxe de base suivante est utilisée pour appliquer la fonction apply() des pandas :

DataFrame.apply(function, axis, args=())

Voir Dans la syntaxe ci-dessus, la fonction doit être appliquée à chaque ligne. L’axis est l’argument le long duquel la fonction est appliquée dans le DataFrame. Par défaut, la valeur axis est 0. La valeur de axis=1, si la fonction s’applique à chaque ligne. Les args représentent le tuple ou la liste des arguments passés à la fonction.

En utilisant la fonction apply() des pandas, nous pouvons facilement appliquer différentes fonctions à chaque ligne du DataFrame. Les moyens énumérés ci-dessous nous aident à atteindre cet objectif :

Appliquer la fonction lambda à chaque ligne dans le Pandas DataFrame

Pour appliquer la fonction lambda à chaque ligne du DataFrame, nous avons utilisé la fonction lambda comme premier argument dans le DataFrame, et axis=1 passé comme deuxième argument dans le dataframe.apply() en utilisant le DataFrame créé ci-dessus.

Pour voir comment appliquer la fonction lambda à chaque ligne du DataFrame, essayez l’exemple suivant :

Exemples de codes :

import pandas as pd
import numpy as np
from IPython.display import display

# List of Tuples data
data = [
    (1, 34, 23),
    (11, 31, 11),
    (22, 16, 21),
    (33, 32, 22),
    (44, 33, 27),
    (55, 35, 11),
]

# Create a DataFrame object
dataframe = pd.DataFrame(data, columns=list("ABC"))
print("Original Dataframe before applying lambda function: ", sep="\n")
display(dataframe)

# Apply a lambda function to each row by adding 10
new_dataframe = dataframe.apply(lambda x: x + 10, axis=1)
print("Modified New Dataframe by applying lambda function on each row:")
display(new_dataframe)

Production :

Original Dataframe before applying lambda function: 
    A	B	C
0	1	34	23
1	11	31	11
2	22	16	21
3	33	32	22
4	44	33	27
5	55	35	11
Modified Dataframe by applying lambda function on each row:
    A	B	C
0	11	44	33
1	21	41	21
2	32	26	31
3	43	42	32
4	54	43	37
5	65	45	21

les pandas appliquent la fonction à chaque ligne - lambda

Appliquer une fonction NumPy à chaque ligne de Pandas DataFrame

On peut aussi utiliser la fonction NumPy passée en argument à dataframe.apply(). Dans l’exemple suivant, nous appliquons la fonction NumPy à chaque ligne et calculons la racine carrée de chaque valeur.

Exemples de codes :

import pandas as pd
import numpy as np
from IPython.display import display


def main():
    # List of Tuples
    data = [
        (2, 3, 4),
        (3, 5, 10),
        (44, 16, 2),
        (55, 32, 12),
        (60, 33, 27),
        (77, 35, 11),
    ]
    # Create a DataFrame object
    dataframe = pd.DataFrame(data, columns=list("ABC"))
    print("Original Dataframe", sep="\n")
    display(dataframe)

    # Apply a numpy function to every row by taking square root of each value
    new_dataframe = dataframe.apply(np.sqrt, axis=1)
    print("Modified Dataframe by applying numpy function on each row:", sep="\n")
    display(new_dataframe)


if __name__ == "__main__":
    main()

Production :

Original Dataframe
    A	B	C
0	2	3	4
1	3	5	10
2	44	16	2
3	55	32	12
4	60	33	27
5	77	35	11
Modified Dataframe by applying numpy function on each row:
          A	      B	          C
0	1.414214	1.732051	2.000000
1	1.732051	2.236068	3.162278
2	6.633250	4.000000	1.414214
3	7.416198	5.656854	3.464102
4	7.745967	5.744563	5.196152
5	8.774964	5.916080	3.316625

les pandas appliquent la fonction à chaque ligne - numpy

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

Nous pouvons également passer la fonction définie par l'utilisateur en tant que paramètre dans le dataframe.apply avec un argument. Dans l’exemple suivant, nous avons passé une fonction définie par l’utilisateur avec l’argument args=[2]. Chaque série de valeurs de ligne est multipliée par 2.

Voir l’exemple suivant :

Exemple de code :

import pandas as pd
import numpy as np
from IPython.display import display


def multiplyData(x, y):
    return x * y


def main():
    # List of Tuples
    data = [
        (2, 3, 4),
        (3, 5, 10),
        (44, 16, 2),
        (55, 32, 12),
        (60, 33, 27),
        (77, 35, 11),
    ]
    # Create a DataFrame object
    dataframe = pd.DataFrame(data, columns=list("ABC"))
    print("Original Dataframe", sep="\n")
    display(dataframe)

    # Apply a user defined function with arguments to each row of Pandas dataframe
    new_dataframe = dataframe.apply(multiplyData, axis=1, args=[2])
    print(
        "Modified Dataframe by applying user defined function on each row of pandas dataframe:",
        sep="\n",
    )
    display(new_dataframe)


if __name__ == "__main__":
    main()

Production :

Original Dataframe
   A	B	C
0	2	3	4
1	3	5	10
2	44	16	2
3	55	32	12
4	60	33	27
5	77	35	11
Modified Dataframe by applying user defined function on each row of pandas dataframe:
    A	B	C
0	4	6	8
1	6	10	20
2	88	32	4
3	110	64	24
4	120	66	54
5	154	70	22

les pandas appliquent la fonction à chaque ligne - définie par l’utilisateur

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

Nous pouvons également appliquer une fonction définie par l’utilisateur à chaque ligne sans aucun argument. Voir l’exemple suivant :

Exemples de codes :

import pandas as pd
import numpy as np
from IPython.display import display


def userDefined(x):
    return x * 4


def main():
    # List of Tuples
    data = [
        (2, 3, 4),
        (3, 5, 10),
        (44, 16, 2),
        (55, 32, 12),
        (60, 33, 27),
        (77, 35, 11),
    ]
    # Create a DataFrame object
    dataframe = pd.DataFrame(data, columns=list("ABC"))
    print("Original Dataframe", sep="\n")
    display(dataframe)

    # Apply a user defined function without arguments to each row of Pandas dataframe
    new_dataframe = dataframe.apply(userDefined, axis=1)
    print(
        "Modified Dataframe by applying user defined function on each row of pandas dataframe:",
        sep="\n",
    )
    display(new_dataframe)


if __name__ == "__main__":
    main()

Production :

Original Dataframe
    A	B	C
0	2	3	4
1	3	5	10
2	44	16	2
3	55	32	12
4	60	33	27
5	77	35	11
Modified Dataframe by applying user defined function on each row of pandas dataframe:
   A	B	C
0	8	12	16
1	12	20	40
2	176	64	8
3	220	128	48
4	240	132	108
5	308	140	44

les pandas appliquent la fonction à chaque ligne - définie par l’utilisateur

Article connexe - Pandas DataFrame