前提
pythonのquery関数について質問です。
以下のような出力を望んでいます。変数には@をつける方法が一般的と思っていましたが、これは数値のみ対応ということでしょうか。または他の問題が生じているのでしょうか、、、
出力において正解のコード
Python
1import pandas as pd 2 3df = pd.DataFrame({ 4 'city': ['osaka', 'osaka', 'osaka', 'osaka', 'tokyo', 'tokyo', 'tokyo'], 5 'food': ['apple', 'orange', 'banana', 'banana', 'apple', 'apple', 'banana'], 6 'price': [100, 200, 250, 300, 150, 200, 400], 7 'quantity': [1, 2, 3, 4, 5, 6, 7] 8}) 9 10df.query("price > 200")
該当のソースコード
Python
1import pandas as pd 2 3df = pd.DataFrame({ 4 'city': ['osaka', 'osaka', 'osaka', 'osaka', 'tokyo', 'tokyo', 'tokyo'], 5 'food': ['apple', 'orange', 'banana', 'banana', 'apple', 'apple', 'banana'], 6 'price': [100, 200, 250, 300, 150, 200, 400], 7 'quantity': [1, 2, 3, 4, 5, 6, 7] 8}) 9a = 'price' 10df.query("@a > 200")
発生しているエラー
TypeError Traceback (most recent call last) /var/folders/gr/t18r0f2934x_rfqfsphwz7180000gn/T/ipykernel_31526/1700137686.py in <module> 6 }) 7 a = 'price' ----> 8 df.query("@a > 200") ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/frame.py in query(self, expr, inplace, **kwargs) 4109 kwargs["level"] = kwargs.pop("level", 0) + 1 4110 kwargs["target"] = None -> 4111 res = self.eval(expr, **kwargs) 4112 4113 try: ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/frame.py in eval(self, expr, inplace, **kwargs) 4238 kwargs["resolvers"] = tuple(kwargs.get("resolvers", ())) + resolvers 4239 -> 4240 return _eval(expr, inplace=inplace, **kwargs) 4241 4242 def select_dtypes(self, include=None, exclude=None) -> DataFrame: ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/computation/eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace) 354 eng = ENGINES[engine] 355 eng_inst = eng(parsed_expr) --> 356 ret = eng_inst.evaluate() 357 358 if parsed_expr.assigner is None: ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/computation/engines.py in evaluate(self) 75 """ 76 if not self._is_aligned: ---> 77 self.result_type, self.aligned_axes = align_terms(self.expr.terms) 78 79 # make sure no names in resolvers and locals/globals clash ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/computation/align.py in align_terms(terms) 157 # if all resolved variables are numeric scalars 158 if all(term.is_scalar for term in terms): --> 159 return result_type_many(*(term.value for term in terms)).type, None 160 161 # perform the main alignment ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/computation/common.py in result_type_many(*arrays_and_dtypes) 21 """ 22 try: ---> 23 return np.result_type(*arrays_and_dtypes) 24 except ValueError: 25 # we have > NPY_MAXARGS terms in our expression <__array_function__ internals> in result_type(*args, **kwargs) TypeError: data type 'price' not understood
拙い文章ですいません!!よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー