我是python的新手,非常感谢您对我下面的问题的帮助
问题:
我正在一个数据帧上进行关键字匹配,我在Jupyter笔记本中尝试了这个代码,它工作得非常好。但是,相同的代码在可视代码中不起作用。Jupyter Notebook和VS代码都运行在相同的python环境中
输入数据帧:
note
-----------------
I have a kayak
I have a jet-ski
I have a canoe
I have a jetski
具有魔力的代码:
def extract():
keywords = ['kayak','jetski']
kayak = re.compile(r'.*(pin.pad|pinpad).*')
jetski= re.compile(r'.*(jetski|jet.ski).*')
for i in keywords:
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
我确实在Jupyter中收到了预期的输出,但是,可视化代码声明了以下错误
File "xyz.py", line 8, in <lambda>
df[i] = df['note'].apply(lambda x: bool(eval((i)).match(x)))
File "<string>", line 1, in <module>
NameError: name 'kayak' is not defined
预期产出:
note kayak jetski
-----------------------------------------
I have a kayak True False
I have a jet-ski False True
I have a canoe False False
I have a jetski False True
请告诉我是否已经回答了这个问题,或者是否需要进一步的信息:
不要在这里使用
eval
。只需定义一个dict
将“kayak”和“jets”映射到适当的对象问题在于,这两个变量不存在于lambda表达式创建的函数的局部范围内,但它们也不在全局范围内。普通的
dict
查找要比调用eval
correct简单得多相关问题 更多 >
编程相关推荐