ホームページ  >  記事  >  バックエンド開発  >  Python で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょう

Python で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょう

青灯夜游
青灯夜游転載
2022-02-03 09:00:299526ブラウズ

この記事では、Python Pandas ライブラリを使用するためのちょっとしたテクニックについて説明し、query() を使用したエレガントなクエリ メソッドを紹介します。

Python で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょう

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(&#39;A in B and C < D&#39;)
   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(&#39;A in B & C > @number&#39;)
   A  B  C  D  E.E
3  b  d  6  4    7

インデックスの選択

列 A の文字が列 B に表示され、インデックスが 2 より大きい行をすべて選択します

>>> df.query(&#39;A in B and index > 2&#39;)
   A  B  C  D  E.E
3  b  d  6  4    7

複数のインデックスの選択

2 レベルのインデックス データフレームを作成します。

>>> import numpy as np
>>> colors = [&#39;yellow&#39;]*3 + [&#39;red&#39;]*2
>>> rank = [str(i) for i in range(5)]
>>> index = pd.MultiIndex.from_arrays([colors, rank], names=[&#39;color&#39;, &#39;rank&#39;])
>>> df = pd.DataFrame(np.arange(10).reshape(5, 2),columns=[&#39;A&#39;, &#39;B&#39;] , index=index)
>>> df = pd.DataFrame(np.arange(10).reshape(5, 2),columns=[&#39;A&#39;, &#39;B&#39;] , 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 == &#39;red&#39;")
            A  B
color rank      
red   3     6  7
      4     8  9

2. 名前のないインデックスが複数の階層にある場合は、インデックス レベルで選択します。

>>> df.index.names = [None, None]
>>> df.query("ilevel_0 == &#39;red&#39;")
       A  B
red 3  6  7
    4  8  9
>>> df.query("ilevel_1 == &#39;4&#39;")
       A  B
red 4  8  9

特殊文字スペースや、中央に演算子などのその他の特殊記号が含まれる列名には、バッククォートを使用する必要があります## #「##」。

>>> df.query(&#39;A == B | (C + 2 > `E.E`)&#39;)
   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() の使用法は比較的簡単で、すぐに使い始めることができ、コードの読みやすさも大幅に向上しています。 【関連する推奨事項:

Python3 ビデオ チュートリアル

]

以上がPython で query() を使用してエレガントなクエリを実行する方法を 1 つの記事で学びましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。