Évaluer dynamiquement des expressions à partir de formules dans Pandas
Défi
Évaluer des expressions arithmétiques à l'aide de pd.eval sur une ou plusieurs colonnes DataFrame, comme indiqué dans le exemple suivant :
x = 5
df2['D'] = df1['A'] + (df1['B'] * x)
Copier après la connexion
pd.eval Fonctions
pd.eval, df.eval et df.query sont trois fonctions étroitement liées pour évaluer les expressions dans Pandas. Chacun a ses propres variations subtiles, mais ils suivent tous des règles de syntaxe et une prise en charge de fonctionnalités similaires.
Fonctionnalités prises en charge :
- Opérations arithmétiques
- Opérations de comparaison
- Opérations booléennes
- Liste et tuple littéraux
- Accès aux attributs
- Expressions d'indice
- Évaluation de variable simple
Règles de syntaxe :
Les expressions doivent être transmises sous forme de chaînes, avec les éléments suivants directives :
- L'expression entière est une chaîne
- Les variables de l'espace de noms global sont référencées par leurs noms
- Des colonnes spécifiques sont accessibles via un accesseur d'attribut
- Les parenthèses peuvent être utilisées pour remplacer la priorité des opérateurs
Clé Différences
pd.eval vs. df.eval
-
Accès aux colonnes : pd.eval nécessite des noms de colonnes avec indexation DataFrame, tandis que df.eval permet un accès direct aux noms de colonnes.
-
Expressions avec DataFrames : pd.eval est meilleur pour les opérations à l'échelle du dataframe, tandis que df.eval fonctionne sur des DataFrames spécifiques.
df.eval vs. df.query
-
Requête vs. Évaluation : df.query évalue les expressions conditionnelles et renvoie les lignes correspondantes. df.eval renvoie le résultat de l'expression elle-même.
-
Commodité : df.query est généralement plus concis à des fins d'interrogation.
Solution
Pour résoudre le défi original en utilisant pd.eval :
x = 5
pd.eval("df1.A + (df1.B * x)")
Copier après la connexion
Réaffectation
Pour réaffecter le résultat de l'expression à df2, utilisez le paramètre target :
pd.eval("D = df1.A + (df1.B * x)", target=df2)
Copier après la connexion
Passer des arguments à l'intérieur de l'expression
Pour passer x comme argument dans la chaîne d'expression, utilisez le @ symbole :
pd.eval("df1.A + (df1.B * @x)", local_dict={'x': x})
Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!