如何使用Pandas将查询与单个外部变量结合起来
我正在尝试通过 html 表单(@search)接受由逗号分隔的许多搜索词的可变输入,并查询数据框的 2 列。
每个列查询都独立工作,但我无法让它们以某种和/或方式协同工作。
第一列查询:
filtered = df.query ('`Drug Name` in @search')
第二列查询:
filtered = df.query ('BP.str.contains(@search, na=False)', engine='python')
像这样编辑组合:
filtered = df.query ("('`Drug Name` in @search') and ('BP.str.contains(@search, na=False)', engine='python')")
给出以下错误,突出显示引擎参数中的 python 标识符
SyntaxError: Python 关键字在 numexpr 查询中无效标识符
编辑 2
数据框是从一个 excel 文件中读取的,列有:药物名称(包含单个药物名称)、BP、U&E(具有长描述性文本条目)
搜索词将通过 html 表单输入:
search = request.values.get('searchinput').replace(" ","").split(',')
作为患者可能使用的药物清单,有时会添加与药物使用相关的特定条件。示例用户输入:
卡托普利、扑热息痛、肾病、慢性
我希望对照特定药物名称检查列表,并检查其他列(例如 BP 和 U&E)是否提及任何搜索词。
编辑 3
道歉,但试图实施给出的答案给我带来了一堆错误。我下面的内容是我所追求的 90%,让我搜索两列,包括“BP”的全部内容。但是我只能通过终端搜索一个术语,如果我 # out 并交换收集使用输入的行(从与终端相关的 html 表单中获取),我得到:
类型错误:不可散列的类型:“列表”
@app.route('/', methods=("POST", "GET"))
def html_table():
searchterms = []
#searchterms = request.values.get('searchinput').replace(" ","").split(',')
searchterms = input("Enter drug...")
filtered = df.query('`Drug Name` in @searchterms | BP.str.contains(@searchterms, na=False)', engine='python')
return render_template('drugsafety.html', tables=[filtered.to_html(classes='data')], titles=['na', 'Drug List'])
<form action="" method="post">
<p><label for="search">Search</label>
<input type="text" name="searchinput"></p>
<p><input type="submit"></p>
</form>
样本数据
BP 列的内容可能很长、具有描述性和可变性,但示例如下:
每 12 个月 – 每 3 至 6 个月患有 CKD 的患者。
Drug Name BP U&E
Perindopril Every 12 months Not needed
Alendronic Acid Not needed Every 12 months
Allopurinol Whilst titrating - 3 months Not needed
有了这条线:
searchterms = request.values.get('searchinput')
在 html 表单输出中输入“月”:
1 Perindopril Every 12 months Not needed
14 Allopurinol Whilst titrating – 3 months Not needed
都好。
在 html 表单输出中输入“阿仑膦酸”:
13 Alendronic Acid Not needed Every 12 months
也不错,但输入 'Perindopril, Allopurinol' 没有任何回报。
如果我将行更改为:
searchterms = request.values.get('searchinput').replace(" ","").split(',')
当页面重新加载时,我收到 TypeError: unhashable type: 'list' 。
但是 - 如果我再改变:
filtered = df.query('`Drug Name` in @searchterms | BP.str.contains(@searchterms, na=False)', engine='python')
到:
filtered = df.query('`Drug Name` in @searchterms')
然后,不可散列的类型错误出现并输入“Perindopril, Allopurinol”返回:
1 Perindopril Every 12 months Not needed
14 Allopurinol Whilst titrating – Every 3 months Not needed
但我现在不再在 BP 列中搜索搜索词。
只是认为这可能是因为 searchterms 是一个列表 '[]' 将它更改为元组 '()' 没有改变任何东西。
任何帮助深表感谢。