Python Pandas - aplikacja funkcji

Aby zastosować funkcje własne lub innej biblioteki do obiektów Pandas, należy pamiętać o trzech ważnych metodach. Metody zostały omówione poniżej. Odpowiednia metoda zależy od tego, czy funkcja ma działać na całym DataFrame, wierszach lub kolumnach, czy elementach.

  • Tabela mądry Zastosowanie funkcji: pipe ()
  • Aplikacja funkcji wiersza lub kolumny: zastosuj ()
  • Element mądry Aplikacja funkcji: applymap ()

Aplikacja funkcji tabelarycznej

Operacje niestandardowe można wykonać, przekazując funkcję i odpowiednią liczbę parametrów jako argumenty potoku. W ten sposób operacja jest wykonywana na całym DataFrame.

Na przykład dodaj wartość 2 do wszystkich elementów w DataFrame. Następnie,

funkcja sumatora

Funkcja sumująca dodaje dwie wartości liczbowe jako parametry i zwraca sumę.

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

Będziemy teraz używać funkcji niestandardowej do wykonywania operacji na DataFrame.

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

Zobaczmy pełny program -

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)

Jego output wygląda następująco -

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

Aplikacja funkcji wiersza lub kolumny

Arbitralne funkcje można stosować wzdłuż osi DataFrame lub Panel przy użyciu apply()metoda, która, podobnie jak opisowe metody statystyczne, przyjmuje opcjonalny argument osi. Domyślnie operacja jest wykonywana według kolumn, przyjmując każdą kolumnę jako tablicę.

Przykład 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)

Jego output wygląda następująco -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

Mijając axis parametr, operacje mogą być wykonywane wierszowo.

Przykład 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)

Jego output wygląda następująco -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

Przykład 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)

Jego output wygląda następująco -

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

Aplikacja funkcji Element Wise

Nie wszystkie funkcje można wektoryzować (ani tablice NumPy, które zwracają inną tablicę ani żadną wartość), metody applymap() w DataFrame i analogously map() on Series akceptuje każdą funkcję Pythona pobierającą jedną wartość i zwracającą pojedynczą wartość.

Przykład 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)

Jego output wygląda następująco -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

Przykład 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)

Jego output wygląda następująco -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64