Aplicar função a cada célula no DataFrame

87

Eu tenho um dataframe que pode ser parecido com este:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Quero examinar cada elemento de cada linha (ou cada elemento de cada coluna) e aplicar a seguinte função para obter o DF subsequente:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Existe uma linha simples que pode aplicar uma função a cada célula?

Este é um exemplo simplista, então pode haver uma maneira mais fácil de executar este exemplo específico diferente de aplicar uma função, mas o que realmente estou perguntando é como aplicar uma função em cada célula dentro de um dataframe.

eljusticiero67
fonte
9
Não acho uma boa ideia editar as perguntas para uma completamente nova, uma vez que você já tem as respostas para a antiga, pois isso invalidaria as respostas anteriores. Solicito que você reverta a pergunta original e faça a nova separadamente.
Nickil Maveli

Respostas:

119

Você pode usar o applymap()que é conciso para o seu caso.

df.applymap(foo_bar)

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

Outra opção é vetorizar sua função e, em seguida, usar o applymétodo:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar
Psidom
fonte
oi, desculpe, a questão era sobre como aplicar uma função e não sobre como descobrir qual célula é par. deixe-me ver se posso mudar o exemplo para ser mais claro ..
eljusticiero67
1
Se você está procurando aplicar uma função, você pode fazerimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Você pode usar, df.applymap(iseven)mas observe que ficará muito lento para DataFrames maiores, então, sempre que tiver a chance, use os métodos vetorizados.
Ayhan
@ayhan - seu método parece funcionar, tanto com np.vectorize quanto sem. Você se importaria de postar a resposta para que eu possa lhe dar o crédito?
eljusticiero67
1
Na verdade, não postei no início porque estava tentando encontrar uma duplicata para vincular isso. Não consegui encontrar uma duplicata exata, mas talvez esta ? Nickil Maveli está certo, você pode esclarecer o significado, mas pelo menos o exemplo deve ser o mesmo, eu acho. Talvez o Psidom possa editar para incluir sua própria sugestão junto com o applymap?
Ayhan