
使用 Pandas 动态计算表达式
问题陈述
您想要使用 pd.eval 对 DataFrame 执行动态操作,包括变量替换和复数算术。
解决方案
1.使用 pd.eval()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 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 engine.
-
parser='pandas':使用默认的 pandas 解析器,它与 Pandas 的运算符优先级一致。
-
global_dict 和 local_dict:提供用于替换的全局和局部变量的字典。这避免了需要在全局命名空间中定义变量。
赋值和就地修改
您可以使用 target 参数将 pd.eval 的结果直接分配给 DataFrame .
1 2 3 4 5 | 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()
1 2 3 4 5 | # 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。
1 2 | # Query df1
df1.query( "A > B" )
|
登录后复制
以上是如何动态评估 Pandas 中的表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!