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