Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python Pandas入門:query()メソッドでDataFrameの列をクエリ(条件抽出)する方法

PandasのDataFrameで列をクエリ(条件による絞り込み)を行うには、query()メソッドを使用します。query()は、文字列形式の条件式を渡すだけで直感的にレコードをフィルタリングできる便利な機能です。

サンプルDataFrameの作成

まず、商品名・期首在庫・期末在庫を持つDataFrameを作成してみましょう。

import pandas as pd

dataFrame = pd.DataFrame({
    "Product": ["SmartTV", "PenDrive", "Speaker", "Earphone"],
    "Opening_Stock": [300, 700, 1200, 1500],
    "Closing_Stock": [200, 500, 1000, 900]
})

query()で列をクエリする

query()メソッドに条件式を渡すことで、複数の列に対して同時に条件を指定できます。以下の例では、「期首在庫が500以上」「期末在庫が1000未満」「商品名がPで始まる」という3つの条件を組み合わせています。

print(dataFrame.query('Opening_Stock >=500 & Closing_Stock < 1000 & Product.str.startswith("P").values'))

各条件の意味は次のとおりです。

  • Opening_Stock >= 500:期首在庫が500以上の行を対象とする
  • Closing_Stock < 1000:期末在庫が1000未満の行を対象とする
  • Product.str.startswith("P"):商品名が「P」で始まる行を対象とする

完全なコード例

ここまでの内容をまとめた完全なコードは以下のとおりです。

import pandas as pd

dataFrame = pd.DataFrame({
    "Product": ["SmartTV", "PenDrive", "Speaker", "Earphone"],
    "Opening_Stock": [300, 700, 1200, 1500],
    "Closing_Stock": [200, 500, 1000, 900]
})

print("DataFrame...\n", dataFrame)

# query()を使って列をクエリし、レコードをフィルタリング
print("\nQuerying columns to filter records...\n")
print(dataFrame.query('Opening_Stock >=500 & Closing_Stock < 1000 & Product.str.startswith("P").values'))

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame...
     Closing_Stock   Opening_Stock   Product
0             200             300   SmartTV
1             500             700   PenDrive
2            1000            1200   Speaker
3             900            1500   Earphone

Querying columns to filter records...

    Closing_Stock   Opening_Stock   Product
1             500             700   PenDrive

出力を見ると、3つの条件をすべて満たすのは「PenDrive」(インデックス1)の行だけであることがわかります。このようにquery()を使えば、数値比較と文字列操作を組み合わせた柔軟なデータ抽出が簡単に行えます。

  1. Python・Pandas DataFrameでCSV読み込み時に列名を明示的に指定する方法

    PandasでCSVファイルを読み込む際、元のファイルにヘッダー(列名)が含まれていないケースはよくあります。そのような場合、read_csv()メソッドのnamesパラメータを使えば、列名を明示的に指定できます。この記事では、具体的な手順をサンプルコードと実行結果とともに解説します。 namesパラメータによる列名の指定 read_csv()メソッドのnamesパラメータに列名のリストを渡すことで、ヘッダーを持たないCSVファイルに任意の列名を割り当てられます。例として、Microsoft Excelで開いた次のようなヘッダーなしのCSVファイルを想定します。 このファイルを読み込む

  2. 【Python・pandas】グループ化された水平棒グラフをプロットし、すべての列を表示する方法

    pandasのDataFrameからグループ化された水平棒グラフを作成し、すべての列を一度に表示したい場合は、plot.barh()メソッドを使います。x軸・y軸の値を個別に指定しないことで、DataFrame内の数値型の列が自動的に検出され、それぞれがグループ化された状態で描画されます。必要なライブラリのインポートまず、データ操作用のpandasと、グラフ描画用のmatplotlibをインポートします。import pandas as pd import matplotlib.pyplot as pltサンプル用のDataFrameを作成するここでは、「車種名」「排気量」「登録価格」の3つの