PandasのSeriesのデータを絞り込む方法について

Python,イメージ

AI実装検定のご案内

PandasのSeriesデータを絞り込む方法にはさまざまな手段があります。

ここでは以下の観点から詳しく解説します。

目次

Seriesの基本構造と準備

まず、PandasのSeriesは1次元のデータ構造です。

ラベル(インデックス)と値のペアで構成されます。

import pandas as pd

s = pd.Series([10, 20, 30, 40, 50], index=["a", "b", "c", "d", "e"])
print(s)
a    10
b    20
c    30
d    40
e    50
dtype: int64

値による絞り込み(ブールインデックス)

最も基本的な絞り込み方法は「条件式によるブールインデックス」です。

# 30以上の値だけを取り出す
filtered = s[s >= 30]
print(filtered)
c    30
d    40
e    50
dtype: int64

これは、s >= 30という条件に該当する値のインデックスだけを残す方法です。

条件を組み合わせた絞り込み

複数条件を組み合わせるには、&(かつ)や|(または)を使います。

# 20以上かつ40以下の値
s_filtered = s[(s >= 20) & (s <= 40)]
print(s_filtered)

注意点:括弧で条件全体を囲まないとエラーになります(ValueError: The truth value of a Series is ambiguous)。

isin()による複数の特定値でのフィルタ

特定の値だけを取り出したいときには、isin()を使います。

# 値が20または50のデータを取得
s_filtered = s[s.isin([20, 50])]
print(s_filtered)
b    20
e    50
dtype: int64

isin()はリストのようなコレクションを引数にとり、True/FalseのブールSeriesを返します。

strアクセサを用いた文字列のフィルタ(文字列Series)

Seriesが文字列で構成されている場合は、.strアクセサを使うと便利です。

# 文字列Seriesの例
s_str = pd.Series(["apple", "banana", "cherry", "avocado", "blueberry"])

# "a"で始まるものを抽出
filtered = s_str[s_str.str.startswith("a")]
print(filtered)
0      apple
3    avocado
dtype: object

他にも.contains().endswith()なども使えます。

between()による範囲指定の簡略表記

数値範囲の絞り込みに便利なbetween()メソッドもあります。

# 20〜40の間のデータ(両端を含む)
s_filtered = s[s.between(20, 40)]
print(s_filtered)
b    20
c    30
d    40
dtype: int64

読みやすく、直感的です。

query()との違い

DataFrameでは.query()を使った絞り込みができますが、Seriesでは基本的にサポートされていません(Pandas 2.2時点ではSeries.query()は存在しません)。

従って、Seriesの場合はブールインデックスやメソッドを使う必要があります。

loc・ilocとの併用

Seriesでもlocilocを使って、インデックスの値や位置による絞り込みが可能です。

# ラベルが 'a' から 'c' の範囲
print(s.loc["a":"c"])

# 位置が 1 から 3 の要素
print(s.iloc[1:4])

locはラベルベース(名前)で、ilocは位置ベース(インデックス番号)で指定します。

まとめ

方法用途
s[条件]基本的な絞り込みs[s > 30]
&, `, ~`条件の組み合わせ
isin()複数の一致する値で絞り込みs[s.isin([20, 50])]
between()数値範囲の簡易フィルタs[s.between(20, 40)]
str.contains(), etc.文字列に対するフィルタs_str[s_str.str.contains("berry")]
loc, ilocインデックス・位置での抽出s.loc["a":"c"] / s.iloc[1:3]

以上、PandasのSeriesのデータを絞り込む方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次