如何动态评估 Pandas 中的表达式?

Patricia Arquette
发布: 2024-11-15 10:07:02
原创
385 人浏览过

How Can I Dynamically Evaluate Expressions in Pandas?

使用 Pandas 动态计算表达式

问题陈述

您想要使用 pd.eval 对 DataFrame 执行动态操作,包括变量替换和复杂算术.

解决方案

1.使用 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)")
登录后复制

性能参数

以下参数可用于优化 pd.eval 性能:

  • engine='numexpr':使用高度优化的 numexpr 引擎。
  • parser='pandas':使用默认的 pandas 解析器,它与 Pandas 的运算符优先级保持一致。
  • global_dictlocal_dict:提供用于替换的全局和局部变量的字典。这避免了需要在全局命名空间中定义变量。

赋值和就地修改

您可以使用 target 参数将 pd.eval 的结果直接分配给 DataFrame .

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.使用 df.eval()

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

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

与 df.query() 的比较

虽然 pd.eval 适合计算表达式,但 df.query() 对于条件条件更加简洁和高效查询,因为它根据布尔表达式过滤 DataFrame。

# Query df1
df1.query("A > B")
登录后复制

以上是如何动态评估 Pandas 中的表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板