无法在pandas 0.14.0中查询局部变量

chr*_*ock 13 python pandas

我可以查询一个显式值:

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)


cho*_*raf 5

上面的答案非常正确,但想提一下我在这种情况下使用的另一种解决方法。基本上,只需像对待任何其他要插入变量的字符串一样对待查询字符串。

my_symbol = 'BUD US'
fills.query("Symbol=='{0}'".format(my_symbol))
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的评论固定