Python Pandas - Applicazione di funzioni
Per applicare le funzioni proprie o di un'altra libreria agli oggetti Pandas, è necessario essere consapevoli dei tre metodi importanti. I metodi sono stati discussi di seguito. Il metodo appropriato da utilizzare dipende dal fatto che la funzione si aspetti di operare su un intero DataFrame, per riga o colonna o per elemento.
- Applicazione funzione tabella: pipe ()
- Applicazione della funzione per riga o colonna: apply ()
- Applicazione della funzione basata sugli elementi: applymap ()
Applicazione funzione tabella
Le operazioni personalizzate possono essere eseguite passando la funzione e il numero appropriato di parametri come argomenti pipe. Pertanto, l'operazione viene eseguita sull'intero DataFrame.
Ad esempio, aggiungi un valore 2 a tutti gli elementi nel DataFrame. Poi,
funzione sommatore
La funzione sommatore aggiunge due valori numerici come parametri e restituisce la somma.
def adder(ele1,ele2):
return ele1+ele2
Ora useremo la funzione personalizzata per eseguire operazioni sul DataFrame.
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
Vediamo il programma completo -
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print df.apply(np.mean)
Suo output è il seguente -
col1 col2 col3
0 2.176704 2.219691 1.509360
1 2.222378 2.422167 3.953921
2 2.241096 1.135424 2.696432
3 2.355763 0.376672 1.182570
4 2.308743 2.714767 2.130288
Applicazione di funzioni per riga o colonna
Le funzioni arbitrarie possono essere applicate lungo gli assi di un DataFrame o di un pannello utilizzando il apply()metodo, che, come i metodi statistici descrittivi, accetta un argomento asse opzionale. Per impostazione predefinita, l'operazione esegue in base alla colonna, assumendo ogni colonna come un array.
Esempio 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print df.apply(np.mean)
Suo output è il seguente -
col1 -0.288022
col2 1.044839
col3 -0.187009
dtype: float64
Passando axis parametro, le operazioni possono essere eseguite per riga.
Esempio 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print df.apply(np.mean)
Suo output è il seguente -
col1 0.034093
col2 -0.152672
col3 -0.229728
dtype: float64
Esempio 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print df.apply(np.mean)
Suo output è il seguente -
col1 -0.167413
col2 -0.370495
col3 -0.707631
dtype: float64
Applicazione della funzione Element Wise
Non tutte le funzioni possono essere vettorializzate (né gli array NumPy che restituiscono un altro array né alcun valore), i metodi applymap() su DataFrame e analogously map() on Series accetta qualsiasi funzione Python che prenda un singolo valore e restituisca un singolo valore.
Esempio 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
# My custom function
df['col1'].map(lambda x:x*100)
print df.apply(np.mean)
Suo output è il seguente -
col1 0.480742
col2 0.454185
col3 0.266563
dtype: float64
Esempio 2
import pandas as pd
import numpy as np
# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)
Suo output è il seguente -
col1 0.395263
col2 0.204418
col3 -0.795188
dtype: float64