I can query an explicit value:
fills.query('Symbol=="BUD US"')
Now I want to query a variable:
In [40]: my_symbol
Out[40]: 'BUD US'
In pandas 0.13.1, I could simply use:
fills.query('Symbol==my_symbol')
This is no longer permitted in pandas 0.14.0 because local variables must be referred to explicitly. So I tried
fills.query('Symbol==@my_symbol')
but this returned an error
KeyError: '__pd_eval_local_my_symbol'
I was able to change some of my other code to use explicit local variables, but this one just will not take. Any thoughts? The dtype is object
, if that helps.
Seems a bug in 0.14, specifically with strings (works eg with ints). I filed an issue here: https://github.com/pydata/pandas/issues/7300.
As a workaround for now, you can wrap it in a list:
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
The above answer is pretty much right on, but wanted to mention another workaround that I've used in this situation. Basically, just treat the query string like you would any other string where you'd want to insert a variable.
my_symbol = 'BUD US'
fills.query("Symbol=='{0}'".format(my_symbol))
edit: fixed per your comment
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With