python_pandas

【完全解説】pandasでデータをフィルタリングする方法

データ分析や機械学習で頻繁に使用されるPythonのライブラリ「pandas」は、データの操作や加工が非常に簡単に行えます。本記事では、pandasでデータをフィルタリングする方法を初心者にもわかりやすく解説します。データの抽出や条件による選択方法をマスターし、効率的なデータ分析を目指しましょう。


1. フィルタリングの基本

pandasでデータをフィルタリングする基本は、ブールインデックスを使用することです。条件式を指定して、TrueまたはFalseの配列を作成し、それを元にデータを抽出します。

例:

import pandas as pd

# サンプルデータの作成
data = {'名前': ['太郎', '花子', '次郎', '三郎'],
        '年齢': [25, 30, 22, 28],
        '得点': [85, 90, 78, 88]}
df = pd.DataFrame(data)

# 年齢が25以上のデータを抽出
df_filtered = df[df['年齢'] >= 25]

print(df_filtered)

出力:

    名前  年齢  得点
0  太郎  25  85
1  花子  30  90
3  三郎  28  88

解説:

  • df['年齢'] >= 25は、各行の年齢が25以上かどうかを判定し、ブール値のSeriesを返します。
  • df[ブール値のSeries]で、Trueの行だけを抽出します。

2. 条件によるデータの抽出

単一条件でのフィルタリング

例:得点が80以上のデータを抽出

df_filtered = df[df['得点'] >= 80]
print(df_filtered)

出力:

    名前  年齢  得点
0  太郎  25  85
1  花子  30  90
3  三郎  28  88

特定の値を持つデータを抽出

例:名前が「次郎」のデータを抽出

df_filtered = df[df['名前'] == '次郎']
print(df_filtered)

出力:

    名前  年齢  得点
2  次郎  22  78

3. 複数条件でのフィルタリング

AND条件(かつ)

例:年齢が25以上かつ得点が85以上のデータを抽出

df_filtered = df[(df['年齢'] >= 25) & (df['得点'] >= 85)]
print(df_filtered)

出力:

    名前  年齢  得点
0  太郎  25  85
1  花子  30  90
3  三郎  28  88

OR条件(または)

例:年齢が25以上または得点が85以上のデータを抽出

df_filtered = df[(df['年齢'] >= 25) | (df['得点'] >= 85)]
print(df_filtered)

出力:

    名前  年齢  得点
0  太郎  25  85
1  花子  30  90
3  三郎  28  88

解説:

  • AND条件には&を使用します。
  • OR条件には|を使用します。
  • 条件式は必ず括弧()で囲みます。

4. 文字列によるフィルタリング

部分一致でのフィルタリング

例:「郎」が名前に含まれるデータを抽出

df_filtered = df[df['名前'].str.contains('郎')]
print(df_filtered)

出力:

    名前  年齢  得点
0  太郎  25  85
2  次郎  22  78
3  三郎  28  88

解説:

  • str.contains('文字列')で指定した文字列を含むか判定します。

指定の文字列で始まるデータを抽出

例:「三」で始まる名前のデータを抽出

df_filtered = df[df['名前'].str.startswith('三')]
print(df_filtered)

出力:

    名前  年齢  得点
3  三郎  28  88

5. 正規表現を使ったフィルタリング

例:名前が一文字のデータを抽出

df_filtered = df[df['名前'].str.match('^.{1}$')]
print(df_filtered)

出力:

Empty DataFrame
Columns: [名前, 年齢, 得点]
Index: []

解説:

  • str.match('正規表現')で正規表現にマッチするか判定します。
  • 上記の例では、一文字の名前を探しています。

6. 特定の列を選択する方法

単一の列を選択

得点列 = df['得点']
print(得点列)

出力:

0    85
1    90
2    78
3    88
Name: 得点, dtype: int64

複数の列を選択

df_selected = df[['名前', '得点']]
print(df_selected)

出力:

    名前  得点
0  太郎  85
1  花子  90
2  次郎  78
3  三郎  88

7. locとilocの使い方

loc(ラベルによる選択)

# インデックスが1から3までの行、'名前'と'得点'の列を選択
df_loc = df.loc[1:3, ['名前', '得点']]
print(df_loc)

出力:

    名前  得点
1  花子  90
2  次郎  78
3  三郎  88

iloc(位置による選択)

# 1行目から3行目、0列目と2列目を選択
df_iloc = df.iloc[1:4, [0, 2]]
print(df_iloc)

出力:

    名前  得点
1  花子  90
2  次郎  78
3  三郎  88

解説:

  • locは行・列のラベル名で選択します。
  • ilocは行・列の**位置(インデックス)**で選択します。

8. まとめ

pandasでのデータフィルタリングは、データ分析における基本的な操作です。条件指定や列の選択、locilocを活用することで、必要なデータを効率的に抽出できます。

  • ブールインデックスで条件に合うデータを抽出
  • 複数条件でより細かいフィルタリング
  • 文字列操作正規表現で高度な検索
  • locとilocで行・列を柔軟に選択

これらの方法をマスターして、データ分析をスムーズに進めましょう。


9. 関連キーワード

  • pandas フィルタリング
  • pandas 条件抽出
  • pandas 複数条件
  • pandas loc iloc
  • pandas 文字列操作
  • データ分析
  • Python データ操作
  • pandas 入門
  • pandas 使い方
  • pandas ブールインデックス

さらに学ぶ


ご注意:本記事は情報提供を目的としており、特定の行動を推奨するものではありません。実際のデータ分析においては、データの性質や目的に応じて適切な方法を選択してください。


トップに戻る

上部へスクロール