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

Python:NumPyのwhere()メソッドでPandas DataFrameをフィルタリングする方法

NumPyのwhere()メソッドを使うと、Pandas DataFrameを簡単にフィルタリングできます。where()メソッドの引数に条件を指定すると、条件を満たす行のインデックスが返されるので、それを.loc[]に渡すことで該当するデータだけを抽出できます。

まずは、必要なライブラリをそれぞれのエイリアス(別名)でインポートしましょう。

import pandas as pd
import numpy as np

Pandas DataFrameの作成

次に、商品レコードを含むPandas DataFrameを作成します。ここでは「Product(商品名)」「Opening_Stock(期首在庫)」「Closing_Stock(期末在庫)」の3つの列を持つデータを用意しました。

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

2つの条件でDataFrameをフィルタリングする

np.where()を使って、2つの条件を組み合わせたフィルタリングを行います。条件同士は&(AND演算子)で連結し、各条件は必ず括弧()で囲んでください。

resValues1 = np.where((dataFrame['Opening_Stock'] >= 700) & (dataFrame['Closing_Stock'] < 1000))

print("\nFiltered DataFrame Value = \n", dataFrame.loc[resValues1])

この例では、「期首在庫が700以上」かつ「期末在庫が1000未満」という2つの条件を両方満たす行のみが抽出されます。

3つの条件でDataFrameをフィルタリングする

続いて、3つ目の条件として文字列操作を追加してみましょう。.str.startswith()を使えば、特定の文字で始まる商品名を簡単に絞り込めます。

resValues2 = np.where((dataFrame['Opening_Stock'] >= 500) & (dataFrame['Closing_Stock'] < 1000) & (dataFrame['Product'].str.startswith('C')))

ここでは、「期首在庫が500以上」「期末在庫が1000未満」「商品名が'C'で始まる」という3つの条件をすべて満たす行が対象になります。

完全なサンプルコード

以下が、ここまでの処理をまとめた完全なコードです。

import pandas as pd
import numpy as np

# 商品データのDataFrameを作成
dataFrame = pd.DataFrame({"Product": ["SmartTV", "ChromeCast", "Speaker", "Earphone"],
                          "Opening_Stock": [300, 700, 1200, 1500],
                          "Closing_Stock": [200, 500, 1000, 900]})

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

# np.where()で2つの条件によりDataFrameをフィルタリング
resValues1 = np.where((dataFrame['Opening_Stock'] >= 700) & (dataFrame['Closing_Stock'] < 1000))

print("\nFiltered DataFrame Value = \n", dataFrame.loc[resValues1])

# np.where()で3つの条件によりDataFrameをフィルタリング
resValues2 = np.where((dataFrame['Opening_Stock'] >= 500) & (dataFrame['Closing_Stock'] < 1000) & (dataFrame['Product'].str.startswith('C')))

print("\nFiltered DataFrame Value = \n", dataFrame.loc[resValues2])

実行結果

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

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

Filtered DataFrame Value =
    Closing_Stock  Opening_Stock      Product
1             500            700   ChromeCast
3             900           1500     Earphone

Filtered DataFrame Value =
    Closing_Stock  Opening_Stock      Product
1             500            700   ChromeCast

ポイントまとめ

  • np.where()は、条件を満たす要素のインデックスを返します。取得したインデックスを.loc[]に渡すことで、該当する行を抽出できます。
  • 複数条件を組み合わせる場合は、各条件を括弧()で囲み、&(AND)や|(OR)で連結します。
  • 文字列に関する条件には、.str.startswith()などの文字列メソッドが便利です。
  1. PythonのMatplotlibでPandas DataFrameのヒストグラムを描画する方法

    ヒストグラムとは、データの分布を視覚的に表現したグラフです。PandasのDataFrameからヒストグラムを作成するには、Matplotlibのhist()メソッドを使用します。この記事では、具体的なコード例とともに、その手順をわかりやすく解説します。必要なライブラリのインポートまず、PandasとMatplotlibの2つのライブラリをインポートします。import pandas as pd import matplotlib.pyplot as pltDataFrameの作成次に、「Car(車名)」と「Reg_Price(登録価格)」の2つの列を持つDataFrameを作成します。dat

  2. Python Pandas入門:DataFrame内のNaN(欠損値)を0に置き換える方法

    PandasのDataFrameに含まれるNaN(欠損値)を0に置き換えるには、fillna()メソッドを使用します。このメソッドは、データクレンジングや前処理の際に非常によく使われる基本的なテクニックです。例として、以下のようなCSVファイル(Microsoft Excelで開いた状態)があるとします。このデータには一部NaN値が含まれています。手順1:必要なライブラリをインポートするまず、Pandasライブラリをインポートします。import pandas as pd手順2:CSVファイルからDataFrameを読み込む次に、read_csv()メソッドを使ってCSVファイルのデータをDa