DataFrame'deki her hücreye işlev uygulayın


88

Şuna benzeyen bir veri çerçevem ​​var:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Her satırın her öğesine (veya her sütunun her öğesine) bakmak ve sonraki DF'yi elde etmek için aşağıdaki işlevi uygulamak istiyorum:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Her hücreye bir işlev uygulayabilen basit bir tek satır var mı?

Bu basit bir örnektir, bu nedenle bu belirli örneği yürütmenin bir işlevi uygulamaktan daha kolay bir yolu olabilir, ancak asıl sorduğum şey, bir veri çerçevesi içindeki her hücreye bir işlevin nasıl uygulanacağıdır.


9
Eski cevaplara zaten sahip olduğunuzda, soruları tamamen yeni bir soruya dönüştürmenin iyi bir fikir olduğunu sanmıyorum, çünkü önceki cevapları geçersiz kılacaktır. Sizden orijinal soruyu geri almanızı ve yenisini ayrı ayrı sormanızı rica ediyorum.
Nickil Maveli

Yanıtlar:


125

applymap()Davanız için özlü olanı kullanabilirsiniz .

df.applymap(foo_bar)

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

Diğer bir seçenek, işlevinizi vektörleştirmek ve ardından applyyöntemi kullanmaktır :

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

merhaba üzgünüm, soru bir işlevi uygulamakla ilgiliydi ve aslında hangi hücrenin eşit olduğunu bulmakla ilgili değil. örneği daha açık hale
getirebilir miyim bir bakayım

1
Bir işlev uygulamak istiyorsanız, yapabilirsinizimport numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67 Kullanabilirsiniz, df.applymap(iseven)ancak daha büyük DataFrame'ler için gerçekten yavaşlayacağını unutmayın, böylece şansınız olduğunda, vektörleştirilmiş yöntemleri kullanın.
ayhan

@ayhan - yönteminiz hem np.vectorize ile hem de np.vectorize ile çalışıyor gibi görünüyor. Cevabı göndermenizde bir sakınca var mı ki ben de krediyi verebileyim?
eljusticiero67

1
Aslında bunu ilk başta göndermedim çünkü bunu bağlamak için bir kopya bulmaya çalışıyordum. Tam bir kopyasını bulamadım ama belki bu ? Nickil Maveli haklı ama anlamı netleştirebilirsiniz ama en azından örnek aynı olmalı diye düşünüyorum. Belki Psidom kendi önerisini applicationmap ile birlikte dahil edecek şekilde düzenleme yapabilir?
ayhan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.