我正在使用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)