Wenden Sie die Funktion auf jede Zelle in DataFrame an

87

Ich habe einen Datenrahmen, der folgendermaßen aussehen könnte:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Ich möchte jedes Element jeder Zeile (oder jedes Element jeder Spalte) durchsehen und die folgende Funktion anwenden, um den nachfolgenden DF zu erhalten:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Gibt es einen einfachen Einzeiler, der jeder Zelle eine Funktion zuweisen kann?

Dies ist ein vereinfachtes Beispiel, daher gibt es möglicherweise eine einfachere Möglichkeit, dieses spezielle Beispiel auszuführen, als eine Funktion anzuwenden. Ich frage jedoch wirklich, wie eine Funktion in jeder Zelle innerhalb eines Datenrahmens angewendet werden kann.

eljusticiero67
quelle
9
Ich denke nicht, dass es eine gute Idee ist, die Fragen zu einer völlig neuen zu bearbeiten, sobald Sie bereits Antworten auf die alte haben, da dies die vorherigen Antworten ungültig machen würde. Ich würde Sie bitten, die ursprüngliche Frage zurückzusetzen und die neue separat zu stellen.
Nickil Maveli

Antworten:

119

Sie können verwenden, applymap()was für Ihren Fall prägnant ist.

df.applymap(foo_bar)

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

Eine andere Möglichkeit besteht darin, Ihre Funktion zu vektorisieren und dann die folgende applyMethode zu verwenden:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar
Psidom
quelle
Hallo, sorry, die Frage war, eine Funktion anzuwenden und nicht wirklich herauszufinden, welche Zelle gerade ist. Lassen Sie mich sehen, ob ich das Beispiel ändern kann, um klarer zu sein.
eljusticiero67
1
Wenn Sie nach einer Funktion suchen, können Sie tunimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Sie können verwenden, df.applymap(iseven)aber beachten Sie, dass es für größere DataFrames sehr langsam wird. Verwenden Sie daher immer die vektorisierten Methoden, wenn Sie die Möglichkeit dazu haben.
Ayhan
@ayhan - Ihre Methode scheint zu funktionieren, sowohl mit als auch ohne np.vectorize. Würde es Ihnen etwas ausmachen, die Antwort zu veröffentlichen, damit ich Ihnen die Gutschrift geben kann?
eljusticiero67
1
Ich habe es zuerst eigentlich nicht gepostet, weil ich versucht habe, ein Duplikat zu finden, mit dem ich es verlinken kann. Ich konnte kein genaues Duplikat finden, aber vielleicht dieses ? Nickil Maveli hat zwar Recht, Sie können die Bedeutung klarstellen, aber zumindest sollte das Beispiel das gleiche sein, denke ich. Vielleicht kann Psidom bearbeiten, um ihren eigenen Vorschlag zusammen mit applymap aufzunehmen?
Ayhan