Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to query a local variable in pandas 0.14.0

Tags:

python

pandas

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.

like image 452
chrisaycock Avatar asked May 31 '14 21:05

chrisaycock


2 Answers

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
like image 90
joris Avatar answered Oct 09 '22 12:10

joris


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

like image 24
choldgraf Avatar answered Oct 09 '22 12:10

choldgraf