Python Pandas - Funktionsanwendung

Um die Funktionen Ihrer eigenen oder einer anderen Bibliothek auf Pandas-Objekte anzuwenden, sollten Sie die drei wichtigen Methoden kennen. Die Methoden wurden unten diskutiert. Die geeignete Methode hängt davon ab, ob Ihre Funktion einen gesamten DataFrame, zeilen- oder spaltenweise oder elementweise ausführen soll.

  • Tabelle weise Funktion Anwendung: pipe ()
  • Zeilen- oder spaltenweise Funktionsanwendung: apply ()
  • Elementweise Funktion Anwendung: applymap ()

Tabellenweise Funktionsanwendung

Benutzerdefinierte Operationen können ausgeführt werden, indem die Funktion und die entsprechende Anzahl von Parametern als Pipe-Argumente übergeben werden. Somit wird die Operation für den gesamten DataFrame ausgeführt.

Fügen Sie beispielsweise allen Elementen im DataFrame den Wert 2 hinzu. Dann,

Addiererfunktion

Die Addiererfunktion fügt zwei numerische Werte als Parameter hinzu und gibt die Summe zurück.

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

Wir werden nun die benutzerdefinierte Funktion verwenden, um Operationen am DataFrame durchzuführen.

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

Sehen wir uns das vollständige Programm an -

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)

Es ist output ist wie folgt -

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

Zeilen- oder spaltenweise Funktionsanwendung

Mit dem können beliebige Funktionen entlang der Achsen eines DataFrames oder Panels angewendet werden apply()Methode, die wie die deskriptiven Statistikmethoden ein optionales Achsenargument verwendet. Standardmäßig wird die Operation spaltenweise ausgeführt, wobei jede Spalte als Array-ähnlich betrachtet wird.

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

Es ist output ist wie folgt -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

Durch vorbei axis Parameter können Operationen zeilenweise ausgeführt werden.

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

Es ist output ist wie folgt -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

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

Es ist output ist wie folgt -

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

Elementweise Funktionsanwendung

Nicht alle Funktionen können vektorisiert werden (weder die NumPy-Arrays, die ein anderes Array zurückgeben, noch ein Wert), die Methoden applymap() auf DataFrame und analogously map() on Series akzeptiert alle Python-Funktionen, die einen einzelnen Wert annehmen und einen einzelnen Wert zurückgeben.

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

Es ist output ist wie folgt -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

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

Es ist output ist wie folgt -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64