У меня есть задача, в которой мне нужно отфильтровать Pandas DataFrame на основе указанного пользователем логического выражения. Теперь я видел модуль PyParser или LARK, который я хотел бы использовать, но не могу понять, как их настроить.
У меня есть несколько операторов, например CONTAINS
, EQUAL
, FUZZY_MATCH
и c. Кроме того, я хотел бы объединить некоторые выражения в более сложные.
Пример выражения:
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'
}
}
}
Или что-то в этом роде. Если у вас есть лучший способ структурировать результат, я открыт для предложений. Я новичок в этом, поэтому уверен, что это можно улучшить.