如何使用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 是一个列表 '[]' 将它更改为元组 '()' 没有改变任何东西。

任何帮助深表感谢。

以上是如何使用Pandas将查询与单个外部变量结合起来的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>