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