在`pd.eval`或`df.eval`中公开内置函数(例如`str`)

问题描述 投票:0回答:1

默认情况下,pandas 的

eval
pd.eval
df.eval
)捕获
locals()
globals()
,并在表达式中将它们用作名称(如果前缀为
@
)。然而,内置函数,例如
str
,都不在其中。我怎样才能暴露它们,使它们在表达式中可用(我猜也可以使用
@
)?这些表达式是(受信任的)用户提供的,所以我不能只添加我需要的内置函数。

举一个具体的例子,我想运行如下所示的代码:

df = pd.DataFrame({'a' : [1, 2, 3, 4]})
res = df.eval('a.astype(@str)', engine='python')

目前,此操作失败:

pandas.core.computation.ops.UndefinedVariableError: local variable 'str' is not defined
。我当前的解决方法是在测试时手动将
str
添加到
globals()

python pandas dataframe eval
1个回答
0
投票

IIUC,将类型放在引号之间

'str'
:

res = df.eval("a.astype('str')", engine="python")

输出:

print(type(res.iat[0])) # <class 'str'>

print(res)

0    1
1    2
2    3
3    4
Name: a, Length: 4, dtype: object
© www.soinside.com 2019 - 2024. All rights reserved.