118 votes

Appliquer la fonction à chaque cellule du DataFrame

J'ai un cadre de données qui peut ressembler à ceci :

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Je veux examiner chaque élément de chaque ligne (ou chaque élément de chaque colonne) et appliquer la fonction suivante pour obtenir le DF suivant :

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Existe-t-il une formule simple permettant d'appliquer une fonction à chaque cellule ?

Il s'agit d'un exemple simpliste, il peut donc y avoir un moyen plus facile d'exécuter cet exemple spécifique autre que l'application d'une fonction, mais ce que je demande vraiment, c'est comment appliquer une fonction dans chaque cellule d'un cadre de données.

13 votes

Je ne pense pas que ce soit une bonne idée de modifier les questions en une toute nouvelle, une fois que vous avez déjà obtenu des réponses à l'ancienne, car cela invaliderait les réponses précédentes. Je vous demanderais de revenir sur la question originale et de poser la nouvelle séparément.

177voto

Psidom Points 115100

Vous pouvez utiliser applymap() qui est concise pour votre cas.

df.applymap(foo_bar)

#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

Une autre option est de vectoriser votre fonction et d'utiliser ensuite apply méthode :

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

0 votes

Bonjour, désolé, la question portait sur l'application d'une fonction et non pas sur la détermination de la cellule paire.

1 votes

Si vous cherchez à appliquer une fonction, vous pouvez faire ceci import numpy as np; df.apply(np.vectorize(iseven))

2 votes

@eljusticiero67 Vous pouvez utiliser df.applymap(iseven) mais notez que cela deviendra vraiment lent pour les plus grandes DataFrames, donc dès que vous en avez la possibilité, utilisez les méthodes vectorielles.

1voto

U9-Forward Points 8640

Je suppose que vous pourriez utiliser np.vectorize :

>>> df[:] = np.vectorize(foo_bar)(df)
>>> df
       A    B    C
foo  bar  wow  bar
bar  wow  wow  bar
>>> 

Cela pourrait être plus rapide, car il s'agit de l'utilisation de numpy .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X