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

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


Exemple de comment appliquer une fonction à une colonne d'une dataframe avec pandas:

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 colonne donnée

Essayons alors de modifier les éléments de la colonne b par exemple:

>>> df['b']
0     2
1     6
2    10

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

>>> df['b'] = df['b'] + 10
>>> df
   a   b   c   d
0  1  12   3   4
1  5  16   7   8
2  9  20  11  12

Autre exemple en multipliant tous les éléments de la colonne b par 2:

>>> df['b'] = df['b']*2
>>> df
   a   b   c   d
0  1  24   3   4
1  5  32   7   8
2  9  40  11  12

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['b'].apply(np.sqrt)
0    4.898979
1    5.656854
2    6.324555
Name: b, dtype: float64

ou encore comme ceci

>>> df.apply(lambda x: np.sqrt(x) if x.name == 'b' else x)
   a         b   c   d
0  1  4.898979   3   4
1  5  5.656854   7   8
2  9  6.324555  11  12

Exemple en définissant sa propre fonction:

>>> def myfunc(x):
...     return x**2 + 2*x + 3
... 
>>> 
>>> df['b'].apply(myfunc)
0     627
1    1091
2    1683

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!