質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

751閲覧

query関数の変数の代入法について

mizuki-4833

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/09 05:35

編集2022/11/09 05:41

前提

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

拙い文章ですいません!!よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/11/09 05:45

カラム名の置き換えには使用することができませんので f-string を使って下さい。 df.query(f"{a} > 200")
mizuki-4833

2022/11/09 06:19

カラム名というところが肝なのですね!ありがとうございます!!
mizuki-4833

2022/11/09 07:36

melianさんにベストアンサーをつけたいので、お手数ですが回答欄に回答お願いします!
melian

2022/11/09 07:41

ありがとうございます、回答に転記しました。
guest

回答1

0

ベストアンサー

※ コメントから転記

カラム名の置き換えには使用することができませんので f-string をお使い下さい。

python

1df.query(f"{a} > 200")

投稿2022/11/09 07:41

melian

総合スコア19703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問