Numexpr/PyTables:如何从list/array传递执行多个条件查询?

Numexpr/PyTables: how to pass perform multiple condition queries from a list/array?

我正在使用 PyTables 使用函数 tables.Table.read()tables.Table.read_where() 进行查询(即根据某些条件选择多行)。这基本上是基于 numpy 和 pandas with NumExpr:

http://www.pytables.org/usersguide/tutorials.html http://www.pytables.org/cookbook/hints_for_sql_users.html https://github.com/PyTables/PyTables/blob/6782047b9223897fd59ff4967d71d7fdfb474f16/tables/table.py

在"hints for sql users"中一次选择多行的例子是这样的:

rows = tbl.read_where('(sqrt(x**2 + y**2) <= 1) & (temperature < 100)')

假设我更愿意按如下方式进行查询:所有等于温度 100 或等于温度 90 的行

rows = tbl.read_where('(temperature == 100) | (temperature == 90)')

这非常有效。但是我想通过一个list/array的"temperature values"来完成这个任务。

temperatures = [80, 90, 100]
# reads in temperatures
# performs this query: 
rows = tbl.read_where('(temperature == 80) | (temperature == 90) | (temperature == 100)')

这可能吗?我的想法是我会编写一个函数,用户输入一个要查询的值列表,然后对每个值执行 OR 查询。

一种可能的解决方案是通过 list comprehension:

创建 expression
temperatures = [80, 90, 100]

cond = '|'.join(['(temperature == ' + str(x) + ')' for x in temperatures])
print (cond)
(temperature == 80)|(temperature == 90)|(temperature == 100)