Python Pandas - Application de fonction
Pour appliquer vos propres fonctions ou celles d'une autre bibliothèque à des objets Pandas, vous devez être conscient des trois méthodes importantes. Les méthodes ont été discutées ci-dessous. La méthode appropriée à utiliser dépend de si votre fonction s'attend à fonctionner sur un DataFrame entier, par ligne ou par colonne, ou par élément.
- Application de fonction de table sage: pipe ()
- Application de fonction de ligne ou de colonne Wise: apply ()
- Application de la fonction élément par élément: applymap ()
Application de fonction par table
Les opérations personnalisées peuvent être effectuées en passant la fonction et le nombre approprié de paramètres comme arguments de canal. Ainsi, l'opération est effectuée sur l'ensemble du DataFrame.
Par exemple, ajoutez une valeur 2 à tous les éléments du DataFrame. Ensuite,
fonction additionneur
La fonction additionneur ajoute deux valeurs numériques en tant que paramètres et renvoie la somme.
def adder(ele1,ele2):
return ele1+ele2
Nous allons maintenant utiliser la fonction personnalisée pour effectuer des opérations sur le DataFrame.
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
Voyons le programme complet -
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print df.apply(np.mean)
Ses output est comme suit -
col1 col2 col3
0 2.176704 2.219691 1.509360
1 2.222378 2.422167 3.953921
2 2.241096 1.135424 2.696432
3 2.355763 0.376672 1.182570
4 2.308743 2.714767 2.130288
Application de fonction de ligne ou de colonne Wise
Des fonctions arbitraires peuvent être appliquées le long des axes d'un DataFrame ou d'un Panel à l'aide du apply(), qui, comme les méthodes de statistiques descriptives, prend un argument optionnel d'axe. Par défaut, l'opération s'effectue par colonne, en prenant chaque colonne comme un tableau.
Exemple 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print df.apply(np.mean)
Ses output est comme suit -
col1 -0.288022
col2 1.044839
col3 -0.187009
dtype: float64
En passant axis paramètre, les opérations peuvent être effectuées par ligne.
Exemple 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print df.apply(np.mean)
Ses output est comme suit -
col1 0.034093
col2 -0.152672
col3 -0.229728
dtype: float64
Exemple 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print df.apply(np.mean)
Ses output est comme suit -
col1 -0.167413
col2 -0.370495
col3 -0.707631
dtype: float64
Application de la fonction Element Wise
Toutes les fonctions ne peuvent pas être vectorisées (ni les tableaux NumPy qui retournent un autre tableau ni aucune valeur), les méthodes applymap() sur DataFrame et analogously map() on Series accepte toute fonction Python prenant une seule valeur et renvoyant une seule valeur.
Exemple 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
# My custom function
df['col1'].map(lambda x:x*100)
print df.apply(np.mean)
Ses output est comme suit -
col1 0.480742
col2 0.454185
col3 0.266563
dtype: float64
Exemple 2
import pandas as pd
import numpy as np
# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)
Ses output est comme suit -
col1 0.395263
col2 0.204418
col3 -0.795188
dtype: float64