Python Pandas - Aplicación de funciones

Para aplicar sus propias funciones o las de otra biblioteca a los objetos Pandas, debe conocer los tres métodos importantes. Los métodos se comentan a continuación. El método apropiado a usar depende de si su función espera operar en un DataFrame completo, en filas o columnas, o en elementos.

  • Aplicación de la función de tabla: pipe ()
  • Aplicación de la función de fila o columna: aplicar ()
  • Aplicación de función inteligente de elementos: applymap ()

Aplicación de función de tabla

Las operaciones personalizadas se pueden realizar pasando la función y el número apropiado de parámetros como argumentos de canalización. Por lo tanto, la operación se realiza en todo el DataFrame.

Por ejemplo, agregue un valor 2 a todos los elementos del DataFrame. Luego,

función sumadora

La función sumadora agrega dos valores numéricos como parámetros y devuelve la suma.

def adder(ele1,ele2):
   return ele1+ele2

Ahora usaremos la función personalizada para realizar operaciones en el DataFrame.

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)

Veamos el programa 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)

Sus output es como sigue -

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

Aplicación de función de fila o columna

Las funciones arbitrarias se pueden aplicar a lo largo de los ejes de un DataFrame o Panel usando el apply()método, que, como los métodos de estadística descriptiva, toma un argumento de eje opcional. De forma predeterminada, la operación se realiza en columnas, tomando cada columna como una matriz.

Ejemplo 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)

Sus output es como sigue -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

Pasando axis parámetro, las operaciones se pueden realizar por filas.

Ejemplo 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)

Sus output es como sigue -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

Ejemplo 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)

Sus output es como sigue -

col1   -0.167413
col2   -0.370495
col3   -0.707631
dtype: float64

Aplicación de la función Element Wise

No todas las funciones se pueden vectorizar (ni las matrices NumPy que devuelven otra matriz ni ningún valor), los métodos applymap() en DataFrame y analogously map() on Series acepta cualquier función de Python que tome un solo valor y devuelva un solo valor.

Ejemplo 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)

Sus output es como sigue -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

Ejemplo 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)

Sus output es como sigue -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64