Appliquer la fonction à chaque cellule dans DataFrame

87

J'ai un dataframe qui peut ressembler à ceci:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Je veux parcourir 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 un simple one-liner qui peut appliquer une fonction à chaque cellule?

Il s'agit d'un exemple simpliste, il peut donc y avoir un moyen plus simple 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 dataframe.

eljusticiero67
la source
9
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à des réponses à l'ancienne, car cela invaliderait les réponses précédentes. Je vous demanderais de revenir sur la question initiale et de poser la nouvelle séparément.
Nickil Maveli le

Réponses:

119

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

df.applymap(foo_bar)

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

Une autre option consiste à vectoriser votre fonction puis à utiliser la applyméthode:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar
Psidom
la source
Salut désolé, la question portait sur l'application d'une fonction et non sur la détermination de la cellule paire. laissez-moi voir si je peux changer l'exemple pour être plus clair ..
eljusticiero67
1
Si vous cherchez à appliquer une fonction, vous pouvez le faireimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Vous pouvez utiliser, df.applymap(iseven)mais notez que cela deviendra très lent pour les DataFrames plus volumineux, donc chaque fois que vous en aurez l'occasion, utilisez les méthodes vectorisées.
ayhan le
@ayhan - votre méthode semble fonctionner, à la fois avec np.vectorize et sans. Pourriez-vous publier la réponse pour que je puisse vous attribuer le crédit?
eljusticiero67
1
En fait, je ne l'ai pas publié au début parce que j'essayais de trouver un duplicata auquel lier cela. Je n'ai pas trouvé de duplicata exact, mais peut - être celui-ci ? Nickil Maveli a raison cependant, vous pouvez clarifier le sens, mais au moins l'exemple devrait être le même, je pense. Peut-être que Psidom peut modifier pour inclure sa propre suggestion avec applymap?
ayhan le