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

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

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

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

解決済

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

mizuki-4833
mizuki-4833

総合スコア4

Python

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

1回答

0グッド

0クリップ

230閲覧

投稿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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

回答1

1

ベストアンサー

※ コメントから転記

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

python

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

投稿2022/11/09 07:41

melian

総合スコア16208

mizuki-4833😍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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