Python 组合或附加到pyarrow.dataset.expressions

Python 组合或附加到pyarrow.dataset.expressions,python,expression,pyarrow,Python,Expression,Pyarrow,我正在尝试使用pyarrow.dataset筛选pyarrow数据。我想添加一种动态方式来添加到表达式中 from pyarrow import parquet as pq import pyarrow.dataset as ds import datetime exp1 = ds.field("IntCol") == 1 exp2 = ds.field("StrCol") == 'A' exp3 = ds.field("DateCol&quo

我正在尝试使用pyarrow.dataset筛选pyarrow数据。我想添加一种动态方式来添加到表达式中

from pyarrow import parquet as pq
import pyarrow.dataset as ds
import datetime

exp1 = ds.field("IntCol") == 1
exp2 = ds.field("StrCol") == 'A'
exp3 = ds.field("DateCol") == datetime.date.today()

filters = (exp1 & exp2 & exp3)
print(filters)

#To be used in reading parquet tables
df = pq.read_table('sample.parquet', filters=filters)
既然我可能有N个exp,那么在没有写“&”的情况下怎么做呢?我一直在寻找收集表达式的不同方法,如np.logical_和.acculate()。这使我部分达到了目的,但我仍然需要将数组转换为单个表达式

np.logical_and.accumulate([exp1, exp2, exp3])

out: array([<pyarrow.dataset.Expression (IntCol == 1)>,
       <pyarrow.dataset.Expression (StrCol == "A")>,
       <pyarrow.dataset.Expression (DateCol == 2021-06-09)>], dtype=object)
np.logical\u和.accumulate([exp1,exp2,exp3])
out:数组([,,
,
],dtype=object)

沿着numpy路线走可能不是最好的答案。有人建议是否可以这样做吗?

您可以使用
操作符。和
来获得与
&
操作符等效的功能。然后使用
functools.reduce
可以递归地应用于表达式列表

from pyarrow import parquet as pq
import pyarrow.dataset as ds
import datetime

exp1 = ds.field("IntCol") == 1
exp2 = ds.field("StrCol") == 'A'
exp3 = ds.field("DateCol") == datetime.date.today()

filters = (exp1 & exp2 & exp3)
print(filters)

#To be used in reading parquet tables
df = pq.read_table('sample.parquet', filters=filters)
使用以下三个示例表达式:

导入操作符
导入功能工具
>>>functools.reduce(运算符和[exp1,exp2,exp3])