Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menilai Ungkapan Secara Dinamik dalam Panda?

Bagaimanakah Saya Boleh Menilai Ungkapan Secara Dinamik dalam Panda?

Patricia Arquette
Patricia Arquetteasal
2024-11-15 10:07:02461semak imbas

How Can I Dynamically Evaluate Expressions in Pandas?

Menilai Ungkapan Secara Dinamik dengan Panda

Pernyataan Masalah

Anda mahu melakukan operasi dinamik pada DataFrames menggunakan pd.eval, termasuk penggantian pembolehubah dan aritmetik kompleks .

Penyelesaian

1. Menggunakan 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)")

Argumen untuk Prestasi

Argumen berikut boleh digunakan untuk mengoptimumkan prestasi pd.eval:

  • enjin='numexpr': Gunakan enjin numexpr yang sangat dioptimumkan.
  • parser='pandas': Gunakan penghurai panda lalai, yang sejajar dengan keutamaan pengendali Pandas.
  • global_dict dan local_dict: Bekalkan kamus pembolehubah global dan tempatan untuk penggantian. Ini mengelakkan keperluan untuk mentakrifkan pembolehubah dalam ruang nama global.

Tugasan dan Pengubahsuaian di tempat

Anda boleh menetapkan hasil pd.eval terus kepada DataFrame menggunakan hujah sasaran .

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)

2. Menggunakan df.eval()

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

# Perform variable substitution
df1.eval("A > @x", local_dict={'x': 5})

Perbandingan dengan df.query()

Walaupun pd.eval sesuai untuk menilai ungkapan, df.query() adalah lebih ringkas dan cekap untuk bersyarat pertanyaan, kerana ia menapis DataFrame berdasarkan ungkapan Boolean.

# Query df1
df1.query("A > B")

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menilai Ungkapan Secara Dinamik dalam Panda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn