Zastosuj funkcję do każdej komórki w DataFrame

87

Mam ramkę danych, która może wyglądać następująco:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Chcę przejrzeć każdy element każdego wiersza (lub każdy element każdej kolumny) i zastosować następującą funkcję, aby uzyskać kolejny DF:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Czy istnieje prosta jedna linijka, która może zastosować funkcję do każdej komórki?

To jest uproszczony przykład, więc może istnieć łatwiejszy sposób wykonania tego konkretnego przykładu niż zastosowanie funkcji, ale tak naprawdę pytam o to, jak zastosować funkcję w każdej komórce w ramce danych.

eljusticiero67
źródło
9
Wydaje mi się, że nie jest dobrym pomysłem edytowanie pytań na zupełnie nowe, gdy już masz już odpowiedzi na stare, ponieważ unieważniłoby to poprzednie odpowiedzi. Chciałbym poprosić o wycofanie pierwotnego pytania i osobne zadanie nowego.
Nickil Maveli

Odpowiedzi:

119

Możesz użyć applymap()zwięzłego dla swojego przypadku.

df.applymap(foo_bar)

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

Inną opcją jest wektoryzacja funkcji, a następnie użycie applymetody:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar
Psidom
źródło
cześć przepraszam, pytanie dotyczyło zastosowania funkcji, a nie ustalania, która komórka jest parzysta. zobaczę, czy mogę zmienić przykład na jaśniejszy ..
eljusticiero67
1
Jeśli szukasz zastosowania funkcji, możesz to zrobićimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Możesz użyć, df.applymap(iseven)ale pamiętaj, że będzie to bardzo powolne w przypadku większych ramek DataFrame, więc jeśli masz taką możliwość, użyj metod wektoryzowanych.
ayhan
@ayhan - Twoja metoda wydaje się działać, zarówno z np.vectorize, jak i bez. Czy mógłbyś opublikować odpowiedź, abym mógł przyznać Ci kredyt?
eljusticiero67
1
Właściwie na początku tego nie opublikowałem, ponieważ próbowałem znaleźć duplikat, do którego można by to połączyć. Nie mogłem znaleźć dokładnego duplikatu, ale może ten ? Nickil Maveli ma jednak rację, możesz wyjaśnić znaczenie, ale przynajmniej myślę, że przykład powinien być taki sam. Może Psidom może edytować, aby dołączyć własną sugestię wraz z mapą aplikacji?
ayhan