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



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

http://www.pytables.org/usersguide/tutorials.htmlhttp://www.pytables.org/cookbook/hints_for_sql_users.htmlhttps://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查询。

一个可能的解决方案是由list comprehension创建expression:

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

相关内容

  • 没有找到相关文章

最新更新