Numexpr / PyTables:如何从列表/数组中执行多个条件查询?

时间:2016-11-03 07:35:40

标签: pandas numpy pytables hdfstore numexpr

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

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

在“sql用户提示”中,一次选择多行的示例如下:

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

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

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

这完美无缺。但我想通过一个“温度值”列表/数组来完成这项任务。

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

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

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是expression创建list comprehension

temperatures = [80, 90, 100]

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