ホームページ >バックエンド開発 >Python チュートリアル >Python で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょう
この記事では、Python Pandas ライブラリを使用するためのちょっとしたテクニックについて説明し、query() を使用したエレガントなクエリ メソッドを紹介します。
Pandas が条件に基づいて指定されたデータを取得する場合、対応するコードは誰でも簡単に記述できると思いますが、クエリを使用したことがない場合は、次のように感動すると思います。そのシンプルさに感動しました!
最初に DataFrame を作成します。
import pandas as pd df = pd.DataFrame( {'A': ['e', 'd', 'c', 'b', 'a'], 'B': ['f', 'b', 'c', 'd', 'e'], 'C': range(0, 10, 2), 'D': range(10, 0, -2), 'E.E': range(10, 5, -1)})
ここで、列 A の 文字が列 B に表示されるすべての行を選択します。まず、一般的な 2 つの書き方を見てみましょう。
>>> df[df['A'].isin(df['B'])] A B C D E.E 0 e f 0 10 10 1 d b 2 8 9 2 c c 4 6 8 3 b d 6 4 7 >>> df.loc[df['A'].isin(df['B'])] A B C D E.E 0 e f 0 10 10 1 d b 2 8 9 2 c c 4 6 8 3 b d 6 4 7
これを実現するには、以下の query()
を使用します。
>>> df.query("A in B") A B C D E.E 0 e f 0 10 10 1 d b 2 8 9 2 c c 4 6 8 3 b d 6 4 7
query
を使用した後のコードは簡潔で理解しやすく、メモリ消費量が少ないことがわかります。
複数条件クエリ
列 B に出現する列 A の文字をすべて選択し、列 C が列 D より小さいわかりました。
>>> df.query('A in B and C < D') A B C D E.E 0 e f 0 10 10 1 d b 2 8 9 2 c c 4 6 8ここで
and は
& で表すこともできます。
参照変数
外部定義変数は、変数名の前に @ を付けて式で使用することもできます。>>> number = 5 >>> df.query('A in B & C > @number') A B C D E.E 3 b d 6 4 7
インデックスの選択
列 A の文字が列 B に表示され、インデックスが 2 より大きい行をすべて選択します 。 >>> df.query('A in B and index > 2')
A B C D E.E
3 b d 6 4 7
2 レベルのインデックス データフレームを作成します。
>>> import numpy as np >>> colors = ['yellow']*3 + ['red']*2 >>> rank = [str(i) for i in range(5)] >>> index = pd.MultiIndex.from_arrays([colors, rank], names=['color', 'rank']) >>> df = pd.DataFrame(np.arange(10).reshape(5, 2),columns=['A', 'B'] , index=index) >>> df = pd.DataFrame(np.arange(10).reshape(5, 2),columns=['A', 'B'] , index=index) >>> df A B color rank yellow 0 0 1 1 2 3 2 4 5 red 3 6 7 4 8 9
1.名前を持つインデックスが複数のレベルにある場合は、インデックス名を介して直接選択します。
>>> df.query("color == 'red'") A B color rank red 3 6 7 4 8 9
2. 名前のないインデックスが複数の階層にある場合は、インデックス レベルで選択します。
>>> df.index.names = [None, None] >>> df.query("ilevel_0 == 'red'") A B red 3 6 7 4 8 9 >>> df.query("ilevel_1 == '4'") A B red 4 8 9
特殊文字スペースや、中央に演算子などのその他の特殊記号が含まれる列名には、バッククォートを使用する必要があります## #「##」。
>>> df.query('A == B | (C + 2 > `E.E`)') A B C D E.E 2 c c 4 6 8 3 b d 6 4 7 4 a e 8 2 6
一般に、query() の使用法は比較的簡単で、すぐに使い始めることができ、コードの読みやすさも大幅に向上しています。 【関連する推奨事項:
]
以上がPython で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。