【发布时间】:2020-11-03 16:11:41
【问题描述】:
我有一个任务,我必须根据用户指定的逻辑表达式过滤 Pandas DataFrame。现在,我看到了一个我想使用的名为 PyParser 或 LARK 的模块,但我似乎不知道如何设置它们。
我有几个运算符,如CONTAINS
、EQUAL
、FUZZY_MATCH
等。另外,我想将一些表达式组合成更复杂的表达式。
示例表达式:
ColumnA CONTAINS [1, 2, 3] AND (ColumnB FUZZY_MATCH 'bla' OR ColumnC EQUAL 45)
因此,我希望有一些结构化的 Dict 或 List 具有操作级别,以便按顺序执行它们。因此,此示例表达式的预期结果将类似于:
[['ColumnA', 'CONTAINS', '[1, 2, 3]'], 'AND', [['ColumnB', 'FUZZY_MATCH', 'bla'], OR, ['ColumnC', 'EQUAL', '45']]]
或以dict的形式:
{
'EXPR1': {
'col': 'ColumnA',
'oper': 'CONTAINS',
'value': '[1, 2, 3]']
},
'OPERATOR': 'AND',
'EXPR2': {
'EXPR21': {
'col': 'ColumnB',
'oper': 'FUZZY_MATCH',
'value': 'bla'
},
'OPERATOR': OR,
'EXPR22': {
'col': 'ColumnC',
'oper': 'EQUAL',
'value': '45'
}
}
}
或者类似的东西。如果您有更好的方法来构建结果,我愿意接受建议。我对此很陌生,所以我相当肯定这可以改进。
【问题讨论】:
-
我知道您已经得到了答案,但如果您对使用 Lark 的解决方案感兴趣,请告诉我。
标签: python string parsing boolean-logic boolean-expression