我可以查询一个显式值:
fills.query('Symbol=="BUD US"')
Run Code Online (Sandbox Code Playgroud)
现在我想查询一个变量:
In [40]: my_symbol
Out[40]: 'BUD US'
Run Code Online (Sandbox Code Playgroud)
在pandas 0.13.1中,我可以简单地使用:
fills.query('Symbol==my_symbol')
Run Code Online (Sandbox Code Playgroud)
pandas 0.14.0中不再允许这样做,因为必须明确引用局部变量.所以我试过了
fills.query('Symbol==@my_symbol')
Run Code Online (Sandbox Code Playgroud)
但是这返回了一个错误
KeyError: '__pd_eval_local_my_symbol'
Run Code Online (Sandbox Code Playgroud)
我能够更改我的其他一些代码以使用显式局部变量,但这个不会采用.有什么想法吗?dtype是object,如果有帮助的话.
jor*_*ris 17
似乎是0.14中的一个错误,特别是字符串(例如使用整数).我在这里提出了一个问题:https://github.com/pydata/pandas/issues/7300.
作为现在的解决方法,您可以将其包装在列表中:
In [40]: fills
Out[40]:
Price Symbol
0 109.70 BUD US
1 109.72 BUD US
2 183.30 IBM US
3 183.35 IBM US
In [41]: my_symbol = ['BUD US']
In [42]: fills.query('Symbol==@my_symbol')
Out[42]:
Price Symbol
0 109.70 BUD US
1 109.72 BUD US
Run Code Online (Sandbox Code Playgroud)
上面的答案非常正确,但想提一下我在这种情况下使用的另一种解决方法。基本上,只需像对待任何其他要插入变量的字符串一样对待查询字符串。
my_symbol = 'BUD US'
fills.query("Symbol=='{0}'".format(my_symbol))
Run Code Online (Sandbox Code Playgroud)
编辑:根据您的评论固定