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

Pandasのブールインデックス解説:loc・iloc・ixでデータを抽出する方法

ブールインデックスとは

Pandasのブールインデックス(Boolean Indexing)は、True / False の真偽値ベクトルを使ってDataFrameからデータを選択する手法です。条件に合致する行だけを簡単に抽出できるため、データ分析の現場で非常に役立ちます。

ブールインデックスを利用するには、インデックスが真偽値になっているDataFrameが必要です。

基本の手順

  • データをPythonの辞書として作成する
  • 真偽値ベクトルをインデックスとして指定し、DataFrameオブジェクトに変換する
  • ブールインデックスを使ってデータへアクセスする

例:真偽値インデックスを持つDataFrameを作成する

まずは、True / False をインデックスに持つDataFrameを作成してみましょう。

import pandas as pd

# データ
data = {
    'Name': ['Hafeez', 'Srikanth', 'Rakesh'],
    'Age': [19, 20, 19]
}

# 真偽値インデックスを持つDataFrameを作成
data_frame = pd.DataFrame(data, index=[True, False, True])
print(data_frame)

実行結果

        Name  Age
True   Hafeez   19
False Srikanth   20
True   Rakesh   19

このように、インデックスに True / False が設定されたDataFrameが作成できました。次に、このDataFrameに対して loc[]iloc[]ix[] を使ってデータにアクセスする方法を見ていきます。

loc[] を使ったアクセス

loc[] はラベルベースのインデックス参照です。True を指定すると、インデックスが True の行だけが抽出されます。

# loc() を使ったアクセス
print(data_frame.loc[True])

実行結果

        Name  Age
True   Hafeez   19
True   Rakesh   19

iloc[] を使ったアクセス

iloc[] は位置(整数)ベースのインデックス参照です。整数しか受け付けないため、ここでは True の代わりに 1 を渡しています(True は内部的には 1 と同じ意味になります)。

# iloc() を使ったアクセス
# ilocは整数のみを受け付けるため、Trueではなく1を指定
print(data_frame.iloc[1])

実行結果

Name    Srikanth
Age           20
dtype: object

ix[] を使ったアクセス

ix[] はラベルと位置の両方を受け付けられるメソッドでした。

# ix() を使ったアクセス
# ブール値も整数も渡せる
print(data_frame.ix[True])
print()
print(data_frame.ix[1])

実行結果

        Name  Age
True   Hafeez   19
True   Rakesh   19

Name    Srikanth
Age           20
dtype: object

注意: ix[] は挙動が曖昧で混乱を招きやすいため、Pandas 0.20.0で非推奨となり、バージョン1.0以降では削除されています。現在の開発では loc[] または iloc[] を使用しましょう。

真偽値ベクトルを直接渡す方法

もうひとつの方法として、通常のDataFrameに対して真偽値ベクトルを直接渡すこともできます。この場合、True に対応する行だけが出力されます。

import pandas as pd

# データ
data = {
    'Name': ['Hafeez', 'Srikanth', 'Rakesh'],
    'Age': [19, 20, 19]
}

# 通常のDataFrameを作成
data_frame = pd.DataFrame(data)
print(data_frame)

実行結果

      Name  Age
0   Hafeez   19
1  Srikanth   20
2   Rakesh   19

このDataFrameに真偽値ベクトルを渡して、データにアクセスしてみます。

# DataFrameのインデックスに真偽値ベクトルを渡す
print(data_frame[[True, True, False]])

実行結果

      Name  Age
0   Hafeez   19
1  Srikanth   20

このように、True に対応する行のみが抽出されました。

まとめ

ブールインデックスを使えば、真偽値ベクトルを基準にDataFrameから柔軟にデータを抽出できます。loc[]iloc[] との組み合わせ、あるいは真偽値リストの直接指定など複数の方法があるので、用途に応じて使い分けるとよいでしょう。

ブールインデックスについて不明な点があれば、ぜひコメント欄でお知らせください。

  1. Python・Pandasのquery()メソッドでデータを効率的にフィルタリングする方法

    Pandasは、データクレンジングやデータ分析などに幅広く利用されているPythonのライブラリです。本記事では、query()メソッドを使用して、指定したデータセットから条件に合致するデータを抽出する方法を解説します。query()メソッドでは、単一の条件だけでなく、複数の条件を組み合わせた絞り込みも可能です。データの読み込みまず、Pandasライブラリを使ってCSVファイルのデータをDataFrameとして読み込みます。以下のプログラムがその基本的なコードです。サンプルコードimport pandas as pd # CSVファイルからDataFrameを読み込む data = pd.r

  2. Pythonによるデータ分析と可視化入門|pandasの基本を徹底解説

    Pythonによるデータ分析と可視化の概要 Pythonには、データ分析と可視化のための強力なライブラリが数多く用意されています。代表的なものとしては、NumPy、pandas、matplotlib、seabornなどが挙げられます。本記事では、その中でも中心的な役割を果たすpandasについて詳しく解説します。pandasはNumPyをベースに構築されたオープンソースライブラリで、高速なデータ分析やデータのクリーニング・前処理を効率的に行えます。さらに、pandas自体にも便利な可視化機能が組み込まれています。 pandasのインストール方法 pandasをインストールするには、ターミナル