python中错误useofeval_Python-使用pd.eval()在熊猫中进行动态表达评估

小编典典

这个答案潜入各种特性和功能的提供pd.eval,df.query和df.eval。

设置

示例将涉及这些DataFrame(除非另有说明)。

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'))

df3 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))

df4 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))

pandas.eval -《失踪手册》

注意

在所讨论的三个功能中,pd.eval最为重要。df.eval并在幕后df.query打电话 pd.eval。行为和用法在这三个功能上或多或少是一致的,有些语义上的细微变化将在后面强调。本节将介绍所有这三个功能共有的功能-包括(但不限于)允许的语法,优先级规则和关键字参数。

pd.eval可以评估由变量和/或文字组成的算术表达式。这些表达式必须作为字符串传递。因此,要回答上述问题,你可以

x = 5

pd.eval("df1.A + (df1.B * x)")

这里要注意一些事情:

整个表达式是一个字符串

df1,df2和x引用全局命名空间中的变量,这些变量是eval在解析表达式时通过选择的

使用属性访问器索引访问特定的列。你也可以使用"df1['A'] + (df1['B'] * x)"达到相同的效果。

我将在解释以下target=...属性的部分中讨论重新分配的特定问题。但是现在,这是使用以下命令进行有效操作的更简单示例pd.eval:

pd.eval("df1.A + df2.A") # Valid, returns a pd.Series object

pd.eval("abs(df1) ** .5") # Valid, returns a pd.DataFrame object

…等等。还以相同方式支持条件表达式。下面的语句都是有效表达式,将由引擎进行评估。

pd.eval("df1 > df2")

pd.eval("df1 > 5")

pd.eval("df1 < df2 and df3 < df4")

pd.eval("df1 in [1, 2, 3]")

pd.eval("1 < 2 < 3")

可以在文档中找到详细列出所有受支持的功能和语法的列表。综上所述,

除左移(<>)运算符外的算术运算,例如df + 2 * pi / s ** 4 % 42-the_golden_ratio

比较操作,包括链式比较,例如 2 < df < df2

布尔运算(例如df < df2 and df3 < df4或)not df_bool list和tuple文字(例如[1, 2]或)(1, 2)

属性访问,例如 df.a

下标表达式,例如 df[0]

简单的变量求值,例如,pd.eval('df')(这不是很有用)

数学函数:sin,cos,exp,log,expm1,log1p,sqrt,sinh,cosh,tanh,arcsin,arccos,arctan,arcosh,arcsinh,arctanh,abs和arctan2。

文档的此部分还指定了不支持的语法规则,包括set/ dict文字,if-else语句,循环和理解以及生成器表达式。

从列表中可以明显看出,你还可以传递涉及索引的表达式,例如

pd.eval('df1.A * (df1.index > 1)')

解析器选择:parser=…参数

pd.eval解析表达式字符串以生成语法树时,支持两种不同的解析器选项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值