English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Aplicación de funciones de Pandas

Ejemplo de operación de reconstrucción de índices en Pandas

Para aplicar funciones propias o de otras bibliotecas a objetos Pandas, debe conocer tres métodos importantes. Los métodos se describen a continuación. El método adecuado a usar depende de si desea operar con todo el DataFrame, las filas, las columnas o los elementos.

Aplicación de funciones de tabla: pipe() Aplicación de funciones de filas o columnas: apply() Aplicación de funciones a nivel de elementos: applymap()

Aplicación de funciones de tabla

Se puede ejecutar una operación personalizada en DataFrame pasando una función y la cantidad adecuada de parámetros como parámetros de tubería.

Función de sumador

Por ejemplo, añadir2Añadir un valor a un DataFrame. La función de sumador suma dos valores numéricos y devuelve la suma.

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

Usamos funciones personalizadas para operar con DataFrames.

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

Vamos a ver 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))

Resultados de la ejecución:

       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 funciones de filas o columnas

Se puede usar el método apply() para aplicar cualquier función a un DataFrame o Panel en el eje, que es similar a los métodos de estadísticas descriptivas y admite el parámetro opcional axis. Por defecto, la operación se realiza por columnas, considerando cada columna como un array similar.

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

Resultados de la ejecución:

 col1 -0.288022
 col2 1.044839
 col3 -0.187009
 dtype: float64

Al pasar el parámetro axis, se puede ejecutar la operación por fila.

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

Resultados de la ejecución:

 col1 0.034093
 col2 -0.152672
 col3 -0.229728
 dtype: float64

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

Resultados de la ejecución:

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

Aplicación de funciones a nivel de elemento

No todas las funciones se pueden vectorizar (los arreglos NumPy ni devuelven otro array ni devuelven ningún valor), el método applymap() de DataFrame y el método map() de Series aceptan cualquier función de Python que tome un solo valor y devuelva un solo valor.

Instancia 1

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 # Función personalizada
 df['col1'].map(lambda x:x*100)
 print(df.apply(np.mean))

Resultados de la ejecución:

 col1 0.480742
 col2 0.454185
 col3 0.266563
 dtype: float64

Instancia 2

 import pandas as pd
 import numpy as np
 # Función personalizada
 df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
 df.applymap(lambda x:x*100)
 print(df.apply(np.mean))

Resultados de la ejecución:

 col1 0.395263
 col2 0.204418
 col3 -0.795188
 dtype: float64