Terapkan fungsi ke setiap sel di DataFrame

87

Saya memiliki kerangka data yang mungkin terlihat seperti ini:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Saya ingin melihat setiap elemen dari setiap baris (atau setiap elemen dari setiap kolom) dan menerapkan fungsi berikut untuk mendapatkan DF berikutnya:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Apakah ada satu baris sederhana yang dapat menerapkan fungsi ke setiap sel?

Ini adalah contoh sederhana sehingga mungkin ada cara yang lebih mudah untuk mengeksekusi contoh spesifik ini selain menerapkan fungsi, tapi yang sebenarnya saya tanyakan adalah bagaimana menerapkan fungsi di setiap sel dalam dataframe.

eljusticiero67
sumber
9
Menurut saya bukan ide yang baik untuk mengedit pertanyaan ke pertanyaan yang benar-benar baru, setelah Anda mendapatkan jawaban atas pertanyaan lama karena akan membatalkan jawaban sebelumnya. Saya akan meminta Anda untuk memutar kembali pertanyaan awal dan menanyakan pertanyaan baru secara terpisah.
Nickil Maveli

Jawaban:

124

Anda dapat menggunakan applymap()yang ringkas untuk kasus Anda.

df.applymap(foo_bar)

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

Pilihan lainnya adalah melakukan vektorisasi fungsi Anda dan kemudian menggunakan applymetode:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar
Psidom
sumber
hai maaf, pertanyaannya adalah tentang menerapkan suatu fungsi dan bukan tentang mencari tahu sel mana yang genap. biarkan saya melihat apakah saya dapat mengubah contoh menjadi lebih jelas ..
eljusticiero67
1
Jika Anda mencari untuk menerapkan suatu fungsi, Anda dapat melakukannyaimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Anda dapat menggunakan df.applymap(iseven)tetapi perhatikan bahwa ini akan menjadi sangat lambat untuk DataFrame yang lebih besar jadi kapan pun Anda memiliki kesempatan, gunakan metode vektorisasi.
ayhan
@ayhan - metode Anda tampaknya berfungsi, baik dengan np.vectorize maupun tanpa. Maukah Anda memposting jawabannya sehingga saya dapat memberikan penghargaan kepada Anda?
eljusticiero67
1
Saya sebenarnya tidak mempostingnya pada awalnya karena saya mencoba menemukan duplikat untuk ditautkan. Saya tidak dapat menemukan duplikat persisnya tetapi mungkin yang ini ? Nickil Maveli benar, Anda bisa mengklarifikasi maknanya tapi setidaknya contohnya harus sama menurut saya. Mungkin Psidom dapat mengedit untuk memasukkan saran mereka sendiri bersama dengan applymap?
ayhan