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