python - Python Numpy 从字符串中选择动态语句
问题描述
我正在尝试执行以下操作,
import pandas as pd
import numpy as np
df = pd.DataFrame({'Name': ('Harry','Sally','Megan'), 'Age': (30, 31,'NN')})
a={'target':"Age2",'check':"==30",'iftrue':["Is"]}
condis=[
df['Age'] a['check']
]
df[a['target']]= np.select(condis,a['iftrue'],default=" ")
print(df)
我一直试图将作为字符串接收的 a['check'] 参数转换为语句,所以这个,
df['Age'] a['check']
应该解析/编译为
df['Age'] ==30
有人可以给我关于如何实现这一目标的任何想法吗?也许我在这里遗漏了一些非常基本和简单的东西。
谢谢。
解决方案
您可以使用 eval 将字符串转换为条件:
check = "==30"
age = "20"
print(eval(age+check))
>>> False
但不推荐,因为 eval 是一个函数,使用时要非常小心,因为它可以执行任意代码,会导致安全问题并且难以调试
例如,更合适的解决方案是为比较运算符设置一个参数,为比较参数设置一个参数:
check_op = np.equal
check_arg = 30
print(check_op(check_arg, 20)
>>> False
推荐阅读
- tesseract - 如何在 Alpine 上安装 Tesseract-OCR 4.1.1
- javascript - 相对于视口变换 SVG
- php - 如何从 xampp 安装访问托管在 bluehost/godaddy/hostinger 上的数据库
- python - 使用 Python 嵌套的 For 循环打印乘法表
- regex - 如何找到一个模式并重命名文件,在文件名中的匹配模式的两个部分之间使用前缀插入一个字符?
- typescript - 提取实用程序类型以“this”中断
- algorithm - 我可以使用什么匹配算法?
- bash - Windows 上的 Emacs 从脚本启动时会打开 emtpy 缓冲区
- postgresql - java.lang.NoClassDefFoundError: org/apache/kafka/connect/header/ConnectHeaders
- scripting - ABAQUS 脚本,参考点的边界条件