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.