Comment appliquer une fonction sur une ligne d'une dataframe avec pandas en python ?

Active 10 avril 2020    /    Viewed 1176    /    Comments 0    /    Edit


Exemple de comment appliquer une fonction sur une ligne d'une dataframe avec pandas en python:

Créer une simple dataframe avec pandas

Commençons par créer une simple dataframe df:

>>> import pandas as pd
>>> import numpy as np
>>> data = np.arange(1,13)
>>> data = data.reshape(3,4)
>>> df = pd.DataFrame(data=data,columns=['a','b','c','d'])
>>> df
   a   b   c   d
0  1   2   3   4
1  5   6   7   8
2  9  10  11  12

Appliquer une fonction sur une ligne donnée

Essayons alors de modifier les éléments de la ligne 1 par exemple:

>>> df.iloc[1]
a    5
b    6
c    7
d    8

Si on veut ajouter 10 à tous les éléments de la ligne 1 on peut simplement faire comme ceci:

>>> df.iloc[1] = df.iloc[1] + 10
>>> df
    a   b   c   d
0   1   2   3   4
1  15  16  17  18
2   9  10  11  12

Autre exemple en multipliant tous les éléments de la ligne 1 par 2:

>>> df.iloc[1] = df.iloc[1] * 2.0
>>> df
      a     b     c     d
0   1.0   2.0   3.0   4.0
1  30.0  32.0  34.0  36.0
2   9.0  10.0  11.0  12.0

Pour appliquer une fonction plus compliquée comme une racine carrée par exemple, une solution est de passer par la fonction pandas apply():

>>> df.iloc[1].apply(np.sqrt)
a    5.477226
b    5.656854
c    5.830952
d    6.000000
Name: 1, dtype: float64

ou encore comme ceci

>>> df.apply(lambda x: np.sqrt(x) if x.name == 1 else x, axis=1)
          a          b          c     d
0  1.000000   2.000000   3.000000   4.0
1  5.477226   5.656854   5.830952   6.0
2  9.000000  10.000000  11.000000  12.0

Exemple en définissant sa propre fonction:

>>> def myfunc(x):
...     return x**2 + 2*x + 3
... 
>>> 
>>> df.iloc[1].apply(myfunc)
a     963.0
b    1091.0
c    1227.0
d    1371.0

Références

Liens Site
Apply a function to a single column in Dataframe thispointer.com
pandas.DataFrame.apply pandas doc


Card image cap
profile-image
Daidalos

Hi, I am Ben.

I have developed this web site from scratch with Django to share with everyone my notes. If you have any ideas or suggestions to improve the site, let me know ! (you can contact me using the form in the welcome page). Thanks!