Aplicar función a cada celda en DataFrame

87

Tengo un marco de datos que puede verse así:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Quiero mirar a través de cada elemento de cada fila (o cada elemento de cada columna) y aplicar la siguiente función para obtener el DF subsiguiente:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

¿Existe una línea simple que pueda aplicar una función a cada celda?

Este es un ejemplo simplista, por lo que puede haber una forma más fácil de ejecutar este ejemplo específico además de aplicar una función, pero lo que realmente estoy preguntando es cómo aplicar una función en cada celda dentro de un marco de datos.

eljusticiero67
fuente
9
No creo que sea una buena idea editar las preguntas a una completamente nueva, una vez que ya tenga las respuestas a la anterior, ya que invalidaría las respuestas anteriores. Le pediría que revierta la pregunta original y pregunte la nueva por separado.
Nickil Maveli

Respuestas:

119

Puede usar lo applymap()que sea conciso para su caso.

df.applymap(foo_bar)

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

Otra opción es vectorizar su función y luego usar el 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
fuente
hola lo siento, la pregunta era sobre la aplicación de una función y no sobre averiguar qué celda es pareja. déjame ver si puedo cambiar el ejemplo para que sea más claro ..
eljusticiero67
1
Si está buscando aplicar una función, puede hacerloimport numpy as np; df.apply(np.vectorize(iseven))
Psidom
2
@ eljusticiero67 Puede usar, df.applymap(iseven)pero tenga en cuenta que se volverá muy lento para DataFrames más grandes, así que siempre que tenga la oportunidad, use los métodos vectorizados.
ayhan
@ayhan: su método parece funcionar, tanto con np.vectorize como sin él. ¿Le importaría publicar la respuesta para que pueda darle el crédito?
eljusticiero67
1
De hecho, no lo publiqué al principio porque estaba tratando de encontrar un duplicado para vincularlo. No pude encontrar un duplicado exacto, pero ¿tal vez este ? Sin embargo, Nickil Maveli tiene razón, puedes aclarar el significado, pero creo que al menos el ejemplo debería ser el mismo. ¿Quizás Psidom pueda editar para incluir su propia sugerencia junto con applymap?
ayhan