Предположим, что я получил строку из внешнего интерфейса, например
str='(A==1) & (B==\'A\') & (C>sin(2))'
это самый простой формат, строка может быть намного более сложной.
и я хотел бы применить условие фильтрации данных, например
data = {'A': [1, 2, 3, 4],\
'B': ['A','B','C','D'],\
'C':[0.1,0.2,0.3,0.4]}
df=pd.DataFrame(data)
df_test=df[eval(str)]
Чтобы это сработало, мне нужно найти переменные A,B,C
в строке и заменить их на df.A, df.B, df.C.
Я попробовал следующий метод
import ast
names = [node.id for node in ast.walk(ast.parse(str)) if isinstance(node, ast.Name)]
print(names)
но возвращает ['C', 'A', 'B', 'sin']
, в котором «грех» не требуется.
Я также пытался pyparse
, но до сих пор не могу понять, как определить шаблон имени переменной.
Будет очень признательно, если вы поможете мне дать несколько советов о том, как найти и заменить имя переменной в строке?