提问人:mihovg93 提问时间:11/14/2023 更新时间:11/14/2023 访问量:43
在“pd.eval”或“df.eval”中公开内置(例如“str”)
Expose built-ins (e.g. `str`) in `pd.eval` or `df.eval`
问:
默认情况下,pandas 的 (both 和 ) 捕获并将它们作为表达式中的名称(如果以 . 为前缀)提供但是,内置项(如 )两者都不在。我怎样才能公开它们,使它们在表达式中可用(我猜也是)?表达式是(受信任的)用户提供的,所以我不能只添加我需要的内置组件。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()
答:
0赞
Timeless
11/14/2023
#1
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
评论
0赞
mihovg93
11/14/2023
谢谢。那你知道如何使用普通引号(制作字符串文字)吗?例如 不起作用。它失败,并显示: 。df.eval("a.astype('str') + '_blabla'", engine="python")
TypeError: unsupported operand type(s) for +: 'object' and '<class 'str'>'
0赞
Timeless
11/14/2023
怎么样?df.eval("a.astype('str').add('_blabla')", engine="python")
0赞
mihovg93
11/14/2023
发现有人遇到同样的问题,但似乎没有得到解决,哈哈:github.com/pandas-dev/pandas/issues/47734
1赞
mihovg93
11/14/2023
您的建议可以作为一种解决方法。
评论