Skip to content

BUG: query with local strings gives KeyError #7300

@jorisvandenbossche

Description

@jorisvandenbossche

From SO question (http://stackoverflow.com/questions/23974664/unable-to-query-a-local-variable-in-pandas-0-14-0), referencing a local variable gives an error when this is a string (workaround seems to be to wrap it in a list):

In [39]: fills = pd.DataFrame({'Symbol':['BUD US', 'BUD US', 'IBM US', 'IBM US'], 'Price':[109.70, 109.72, 183.30, 183.35]}) 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 In [43]: my_symbol = 'BUD US' In [44]: fills.query('Symbol==@my_symbol') --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-44-c16846018a13> in <module>() ----> 1 fills.query('Symbol==@my_symbol') ... /home/joris/scipy/pandas/pandas/computation/expr.pyc in _rewrite_membership_op(self, node, left, right) 341 # of one string, kind of a hack 342 if right_str: --> 343 self.env.remove_tmp(right.name) 344 name = self.env.add_tmp([right.value]) 345 right = self.term_type(name, self.env) /home/joris/scipy/pandas/pandas/computation/scope.pyc in remove_tmp(self, name) 287 The name of a temporary to be removed 288 """ --> 289 del self.temps[name] 290 291 @property KeyError: '__pd_eval_local_my_symbol' > /home/joris/scipy/pandas/pandas/computation/scope.py(289)remove_tmp() 288 """ --> 289 del self.temps[name] 290 

@cpcloud

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugRegressionFunctionality that used to work in a prior pandas version

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions