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

Python・pandasのブールインデックス徹底解説!True/Falseと0/1でデータを抽出する方法

pandasのDataFrameでは、True / False といったブール値や、1 / 0 のような整数値をそのままインデックスとして使用できます。これらを活用すると、条件に合致するレコードだけを簡単にフィルタリングでき、データ分析の効率が大きく向上します。本記事では、ブールインデックス操作に使えるさまざまな手法を、具体的なサンプルコードとともにわかりやすく解説します。

ブールインデックスの作成

まず、ゲームのスコアデータを扱うDataFrameを例に見ていきましょう。各曜日に獲得したポイントが辞書形式で格納されたデータを用意します。このDataFrameに対して、TrueとFalseをインデックス値として設定し、最終的なDataFrameを出力してみます。

コード例

import pandas as pd
# 辞書型のデータ
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[True,False,True,False,True])
print(df)

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

出力結果

               Day       points
True        Monday           31
False      Tuesday           24
True     Wednesday           16
False     Thursday           11
True        Friday           22

.loc[] を使ったレコードの抽出

.loc[] を使うと、特定のブール値を持つ行だけを取り出すことができます。以下の例では、インデックスが True になっているレコードのみを取得しています。

コード例

import pandas as pd
# 辞書型のデータ
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[True,False,True,False,True])
#print(df)
print(df.loc[True])

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

出力結果

              Day           points
True       Monday       31
True    Wednesday       16
True       Friday       22

.ix[] を使った抽出(整数値による指定)

この方法では、整数値もブール値のように扱えます。DataFrameのインデックスにあるTrue / Falseを 1 / 0 に置き換え、その値を使ってレコードをフィルタリングします。

なお、.ix[] は現在のpandasでは非推奨(deprecated)となっています。実際の開発では、ラベルベースの抽出には .loc[]、位置ベースの抽出には .iloc[] を使用することが推奨されるため、注意してください。

コード例

import pandas as pd
# 辞書型のデータ
game = {'Day':["Monday","Tuesday","Wednesday","Thursday","Friday"], 'points':[31,24,16,11,22]}
df = pd.DataFrame(game,index=[1,1,0,0,1])
#print(df)
print(df.ix[0])

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

出力結果

        Day points
0 Wednesday     16
0  Thursday     11

まとめ

ブールインデックスを使えば、True / False や 1 / 0 を手軽にインデックスとして扱い、目的のデータだけを柔軟に抽出できます。.loc[] による条件指定は実務でも頻繁に活用される基本的なテクニックなので、ぜひマスターしておきましょう。

  1. C/C++の「!」演算子に相当するPythonの機能とは?

    Pythonで「!」演算子に相当するものは? C/C++において、! 記号は論理否定(NOT)演算子として定義されています。Pythonでは、これに相当するのが not 演算子です。 not 演算子は、オペランドが偽(False)であれば真(True)を返し、真(True)であれば偽(False)を返します。つまり、ブール値(真偽値)を反転させる働きを持っています。 基本的な使い方と実行例 >>> not(True) False >>> not(False) True >>> not(20>30) True >>>

  2. Pythonのブール演算子とは?and・or・notの基本と使い方をわかりやすく解説

    Pythonにおけるブール演算子の基本Pythonでは、and、or、not の3つの論理演算子が提供されており、これらは「ブール演算子」とも呼ばれます。条件分岐や繰り返し処理など、プログラムの制御フローを組み立てる際に欠かせない重要な演算子です。それぞれの演算子には以下のような特徴があります。and:2つのオペランド(被演算子)を必要とし、両方が真(True)の場合にのみ True を返すor:2つのオペランドを必要とし、どちらか一方でも真であれば True を返すnot:1つのオペランドを必要とし、その真偽値を反転させるand演算子:両方が真のときだけTrueを返すブール演算子 and は