Évaluer dynamiquement des expressions à partir d'une formule à l'aide de Pandas
Problème :
Évaluer des expressions arithmétiques à l'aide pd.eval tout en tenant compte des variables, de la priorité des opérateurs et des structures complexes des dataframes.
Réponse :
1. Utilisation de pd.eval
pd.eval(
"df1.A + (df1.B * x)",
local_dict={"x": 5},
target=df2,
parser="python",
engine="numexpr",
)
Copier après la connexion
Arguments :
-
expression : La formule à évaluer sous forme de chaîne.
-
local_dict : Un dictionnaire contenant des variables non définies dans l'espace de noms global.
-
target : La trame de données à laquelle attribuer le résultat.
-
parser : Spécifie l'analyseur utilisé pour analyser l'expression (pandas ou python).
-
engine : Spécifie le backend utilisé pour évaluer l'expression (numexpr ou python ).
2. Utilisation de df.eval
df1.eval(
"A + (B * @x)",
target=df2,
parser="python",
engine="numexpr",
)
Copier après la connexion
Arguments :
- df : la trame de données sur laquelle l'expression est évaluée.
- expression : La formule à évaluer sous forme de chaîne.
- target : La trame de données à laquelle attribuer le résultat.
- parser : Spécifie l'analyseur utilisé pour analyser l'expression (pandas ou python).
- moteur : Spécifie le backend utilisé pour évaluer l'expression (numexpr ou python).
3. Différences entre pd.eval et df.eval
- pd.eval évalue les expressions sur n'importe quel objet, tandis que df.eval évalue les expressions spécifiquement sur les dataframes.
- df.eval nécessite précédant les noms de colonnes avec le symbole at (@) pour éviter toute confusion, contrairement à pd.eval.
- df.eval peut gérer les expressions multilignes avec affectation, alors que pd.eval ne le peut pas.
Remarques supplémentaires :
- Assurez-vous que l'expression est placée entre guillemets doubles.
- x = 5 attribue la valeur 5 à la variable x dans l'espace de noms global .
- parser='python' est recommandé lorsqu'il s'agit de règles de priorité des opérateurs et d'expressions complexes de Python.
- target=df2 garantit que le résultat est attribué au dataframe spécifié.
- engine='numexpr' utilise le moteur numexpr optimisé pour des performances améliorées.
- inplace=True peut être utilisé pour modifier le dataframe d'origine en place.
- df.query peut également être utilisé pour les expressions conditionnelles , renvoyant les lignes qui répondent aux critères spécifiés.
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!