Lorsque vous travaillez avec une DataFrame pandas, il est souvent nécessaire d'appliquer une seule fonction à plusieurs colonnes afin de créer plusieurs nouvelles. Heureusement, ce processus peut être facilement réalisé en utilisant la méthode .apply(). Cela permet une transformation rapide et efficace des données ainsi que la possibilité d'effectuer des opérations intensives en calcul rapidement et efficacement. Exemples :
Données synthétiques
Pour commencer, générons une DataFrame en utilisant des données synthétiques :
import pandas as pd
import numpy as np
import random
np.random.seed(42)
d = {'longitude':[random.uniform(0,1) * (360) - 180 for i in range(20)],
'latitude':[random.uniform(0,1) * (180) - 90 for i in range(20)]}
df = pd.DataFrame(data=d)
Le code affiché ci-dessus générera par exemple :
longitude latitude
0 167.067264 -39.476855
1 28.979819 1.683163
2 -124.513305 -60.536511
3 114.754113 55.249186
4 12.346310 45.642464
5 30.275235 -37.494582
6 135.649712 53.335008
7 175.366444 -30.276944
8 171.082997 -63.158958
9 63.046690 63.781048
10 -113.276502 -65.871205
11 -138.539111 -36.767633
12 -169.591685 -56.994853
13 3.381588 -15.315441
14 138.534118 58.519542
15 -161.543564 56.212077
16 -142.353835 46.069997
17 72.519566 30.986494
18 83.485540 -38.041282
19 68.728968 -18.316078
Créez une fonction avec plusieurs sorties
Pour appliquer une fonction sur plusieurs colonnes, vous devrez créer une fonction personnalisée capable d'accepter plusieurs entrées et de renvoyer plusieurs sorties.
def spatial_aggregation(x):
resolution = 1.0
latitude_idx = int( (x['latitude']+90.0) / resolution )
longitude_idx = int( (x['longitude']+180) / resolution )
return longitude_idx, latitude_idx
Appliquer une fonction à une DataFrame.
Pandas offre une manière efficace d'appliquer une fonction à plusieurs colonnes d'un DataFrame, créant ainsi plusieurs nouvelles colonnes.
Cela peut être fait en utilisant la méthode DataFrame.apply(), qui prend en premier argument la fonction désirée et renvoie un objet pandas avec les variables nouvellement créées. La méthode apply() a également un argument optionnel axis avec la valeur par défaut de 0, qui spécifie comment la fonction doit être appliquée (soit colonne par colonne, soit ligne par ligne), Exemple:
df[['latitude_agg', 'longitude_agg']] = df.apply(spatial_aggregation, axis=1, result_type='expand')
le code affiché ci-dessus générera par exemple:
longitude latitude latitude_agg longitude_agg
0 167.067264 -39.476855 347 50
1 28.979819 1.683163 208 91
2 -124.513305 -60.536511 55 29
3 114.754113 55.249186 294 145
4 12.346310 45.642464 192 135
5 30.275235 -37.494582 210 52
6 135.649712 53.335008 315 143
7 175.366444 -30.276944 355 59
8 171.082997 -63.158958 351 26
9 63.046690 63.781048 243 153
10 -113.276502 -65.871205 66 24
11 -138.539111 -36.767633 41 53
12 -169.591685 -56.994853 10 33
13 3.381588 -15.315441 183 74
14 138.534118 58.519542 318 148
15 -161.543564 56.212077 18 146
16 -142.353835 46.069997 37 136
17 72.519566 30.986494 252 120
18 83.485540 -38.041282 263 51
19 68.728968 -18.316078 248 71
Lors de l'utilisation de la méthode apply(), il est important de s'assurer que la sortie souhaitée a le même nombre de lignes que le dataframe. Si cela n'est pas fait, une ValueError sera levée.
Références
Liens | Site |
---|---|
How to apply a function to an individual or multiple columns of a pandas DataFrame ? | moonbooks.org |
apply() | pandas.pydata.org |