Applica la funzione a ogni cella in DataFrame


88

Ho un dataframe che potrebbe assomigliare a questo:

A        B        C
foo      bar      foo bar
bar foo  foo      bar

Voglio esaminare ogni elemento di ogni riga (o ogni elemento di ogni colonna) e applicare la seguente funzione per ottenere il DF successivo:

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Esiste un semplice one-liner che può applicare una funzione a ciascuna cella?

Questo è un esempio semplicistico, quindi potrebbe esserci un modo più semplice per eseguire questo esempio specifico diverso dall'applicazione di una funzione, ma quello che sto chiedendo è come applicare una funzione in ogni cella all'interno di un dataframe.


9
Non penso che sia una buona idea modificare le domande in una completamente nuova, una volta che hai già le risposte a quella vecchia in quanto invaliderebbe le risposte precedenti. Ti chiederei di annullare la domanda originale e di porre quella nuova separatamente.
Nickil Maveli

Risposte:


125

Puoi usare applymap()che è conciso per il tuo caso.

df.applymap(foo_bar)

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

Un'altra opzione è vettorializzare la tua funzione e quindi utilizzare il applymetodo:

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

ciao scusa, la domanda riguardava l'applicazione di una funzione e non effettivamente capire quale cella è pari. fammi vedere se posso cambiare l'esempio per essere più chiaro ..
eljusticiero67

1
Se stai cercando di applicare una funzione, puoi farloimport numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67 Puoi usare, df.applymap(iseven)ma nota che diventerà molto lento per DataFrame più grandi, quindi ogni volta che ne hai la possibilità, usa i metodi vettorizzati.
ayhan

@ayhan - il tuo metodo sembra funzionare, sia con np.vectorize che senza. Ti dispiacerebbe pubblicare la risposta così posso darti il ​​merito?
eljusticiero67

1
In realtà non l'ho postato all'inizio perché stavo cercando di trovare un duplicato a cui collegarlo. Non sono riuscito a trovare un duplicato esatto ma forse questo ? Nickil Maveli ha ragione però, puoi chiarire il significato ma almeno l'esempio dovrebbe essere lo stesso credo. Forse Psidom può modificare per includere il proprio suggerimento insieme ad applymap?
ayhan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.