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