Maison > développement back-end > Tutoriel Python > Comment puis-je évaluer dynamiquement des expressions dans Pandas ?

Comment puis-je évaluer dynamiquement des expressions dans Pandas ?

Patricia Arquette
Libérer: 2024-11-15 10:07:02
original
446 Les gens l'ont consulté

How Can I Dynamically Evaluate Expressions in Pandas?

Évaluer des expressions dynamiquement avec Pandas

Énoncé du problème

Vous souhaitez effectuer des opérations dynamiques sur des DataFrames à l'aide de pd.eval, y compris la substitution de variables et l'arithmétique complexe .

Solution

1. Utilisation de pd.eval()

# 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)")
Copier après la connexion

Arguments pour les performances

Les arguments suivants peuvent être utilisés pour optimiser les performances de pd.eval :

  • engine='numexpr' : utilisez le numexpr hautement optimisé moteur.
  • parser='pandas' : utilisez l'analyseur pandas par défaut, qui s'aligne sur la priorité des opérateurs de Pandas.
  • global_dict et local_dict : fournit des dictionnaires de variables globales et locales pour la substitution. Cela évite d'avoir à définir des variables dans l'espace de noms global.

Affectation et modification sur place

Vous pouvez attribuer le résultat de pd.eval directement à un DataFrame en utilisant l'argument cible .

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)
Copier après la connexion

2. Utilisation de df.eval()

# Evaluate expression in df1
result = df1.eval("A + B")

# Perform variable substitution
df1.eval("A > @x", local_dict={'x': 5})
Copier après la connexion

Comparaison avec df.query()

Bien que pd.eval soit adapté à l'évaluation d'expressions, df.query() est plus concis et efficace pour les expressions conditionnelles requêtes, car il filtre le DataFrame en fonction d'une expression booléenne.

# Query df1
df1.query("A > B")
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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal