Python 使用操作符进行过滤

Python 使用操作符进行过滤,python,pandas,operator-keyword,Python,Pandas,Operator Keyword,我有三个变量 a='col1' b='==' c=2 我有熊猫数据帧作为 df = pd.DataFrame({'col1': [0, 1, 2], 'col2': [10, 11, 12]},dtype=object) 我想过滤col1=2,所以我写了 df.query("@a @b @c") 这是一个错误 File "<unknown>", line 1 __pd_eval_local_a __pd_eval_local_b __pd_eval_local_c

我有三个变量

a='col1'
b='=='
c=2
我有熊猫数据帧作为

df = pd.DataFrame({'col1': [0, 1, 2], 'col2': [10, 11, 12]},dtype=object)
我想过滤
col1=2
,所以我写了

df.query("@a @b @c")
这是一个错误

File "<unknown>", line 1
    __pd_eval_local_a __pd_eval_local_b __pd_eval_local_c
                                      ^
SyntaxError: invalid syntax
文件“”,第1行
__本地评估a本地评估b本地评估c
^
SyntaxError:无效语法
有人能帮助我如何使用这三个变量来实现这一点吗


谢谢,

如果不需要查询,您可以使用eval:

In [214]: df
Out[214]:
  col1 col2 col3
0    0   10  aaa
1    1   11  bbb
2    2   12  ccc

In [215]: a='col1'; b='=='; c=2   # <--- `c` is `int`

In [216]: df.query(a + b + '@c')
Out[216]:
  col1 col2 col3
2    2   12  ccc

In [217]: a='col3'; b='=='; c='aaa'   # <--- `c` is `str`

In [218]: df.query(a + b + '@c')
Out[218]:
  col1 col2 col3
0    0   10  aaa
a='col1'
b='=='
c='2'

instruction ="df[\"" + a + "\"]" + b  + c
>>>> 'df["col1"]==2'
df[eval(instruction)]
>>>> 
    col1    col2
  2  2      12

你可以只做
df.query(a+b+c)
是的,明白了。但当我把c转换成字符串变量时,它就开始工作了!过滤时,此转换是否会出现问题?请帮忙!我不使用
query
,所以我不知道求值规则,但是如果您只想构造一个查询字符串,那么将所有字符串串联在一起形成一个字符串就不那么麻烦了,即使您想使用的方法有效,我认为它会失败,因为
@c
将使查询
'col1'='2'
过滤字符串
'2'
,而不是数字
2
对不起,我不明白,请用完整的示例编辑您的问题,还有什么是你真正想要达到的,而我们的建议却没有achieve@jezrael,
a+b+str(c)
不适用于字符串。示例:
c=='aaa';a+b+str(c)='col1==aaa'
。而且
aaa
没有被引用,因此它将被视为列名…“@c”这是什么?Python运算符?@ScottBoston,这是我们如何访问
.query()
.eval()
方法中的变量,否则未引用的字符串将被视为列名感谢您的解释
a='col1'
b='=='
c='2'

instruction ="df[\"" + a + "\"]" + b  + c
>>>> 'df["col1"]==2'
df[eval(instruction)]
>>>> 
    col1    col2
  2  2      12