Ausdrücke dynamisch mit Pandas auswerten
Problemstellung
Sie möchten mit pd.eval dynamische Operationen an DataFrames ausführen, einschließlich Variablensubstitution und komplexer Arithmetik .
Lösung
1. Verwendung von pd.eval()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Import necessary libraries
import pandas as pd
import numpy as np
# Create sample DataFrames
np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list( 'ABCD' ))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list( 'ABCD' ))
# Evaluate expression using a variable
x = 5
result = pd. eval ( "df1.A + (df1.B * x)" )
# Alternatively, assign the result to a new column
pd. eval ( "df2['D'] = df1.A + (df1.B * x)" )
|
Nach dem Login kopieren
Argumente für die Leistung
Die folgenden Argumente können verwendet werden, um die Leistung von pd.eval zu optimieren:
-
engine='numexpr': Verwenden Sie die hochoptimierte Numexpr-Engine.
-
parser='pandas': Verwenden Sie den standardmäßigen Pandas-Parser, der sich an der Operatorpriorität von Pandas orientiert.
-
global_dict und local_dict: Stellen Wörterbücher globaler und lokaler Variablen zur Substitution bereit. Dadurch entfällt die Notwendigkeit, Variablen im globalen Namespace zu definieren.
Zuweisung und direkte Änderung
Sie können das Ergebnis von pd.eval mithilfe des Zielarguments direkt einem DataFrame zuweisen .
1 2 3 4 5 | df3 = pd.DataFrame(columns=list( 'FBGH' ), index=df1.index)
pd. eval ( "df3['B'] = df1.A + df2.A" , target=df3)
# In-place modification
pd. eval ( "df2.B = df1.A + df2.A" , target=df2, inplace=True)
|
Nach dem Login kopieren
2. Verwendung von df.eval()
1 2 3 4 5 | # Evaluate expression in df1
result = df1. eval ( "A + B" )
# Perform variable substitution
df1. eval ( "A > @x" , local_dict={ 'x' : 5})
|
Nach dem Login kopieren
Vergleich mit df.query()
Während pd.eval für die Auswertung von Ausdrücken geeignet ist, ist df.query() prägnanter und effizienter für bedingte Ausdrücke Abfragen, da es den DataFrame basierend auf einem booleschen Ausdruck filtert.
1 2 | # Query df1
df1.query( "A > B" )
|
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWie kann ich Ausdrücke in Pandas dynamisch auswerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!