Python Pandas - aplicativo de função

Para aplicar funções próprias ou de outra biblioteca aos objetos Pandas, você deve estar ciente dos três métodos importantes. Os métodos foram discutidos abaixo. O método apropriado a ser usado depende se sua função espera operar em um DataFrame inteiro, linha ou coluna ou elemento.

  • Aplicação da função table wise: pipe ()
  • Aplicação de função inteligente de linha ou coluna: apply ()
  • Aplicação de função elementar: applymap ()

Aplicação de função table-wise

As operações personalizadas podem ser realizadas passando a função e o número apropriado de parâmetros como argumentos de canal. Assim, a operação é realizada em todo o DataFrame.

Por exemplo, adicione um valor 2 a todos os elementos no DataFrame. Então,

função somadora

A função somadora adiciona dois valores numéricos como parâmetros e retorna a soma.

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

Agora usaremos a função personalizada para conduzir a operação no DataFrame.

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

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

Está output é o seguinte -

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

Aplicação de função inteligente de linha ou coluna

Funções arbitrárias podem ser aplicadas ao longo dos eixos de um DataFrame ou Painel usando o apply()método, que, como os métodos de estatística descritiva, leva um argumento de eixo opcional. Por padrão, a operação é executada em colunas, tomando cada coluna como um array.

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

Está output é o seguinte -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

Passando axis parâmetro, as operações podem ser realizadas em linha.

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

Está output é o seguinte -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

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

Está output é o seguinte -

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

Aplicativo de função do elemento sábio

Nem todas as funções podem ser vetorizadas (nem os arrays NumPy que retornam outro array nem qualquer valor), os métodos applymap() no DataFrame e analogously map() em Series aceita qualquer função Python recebendo um único valor e retornando um único valor.

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

Está output é o seguinte -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

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

Está output é o seguinte -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64