べくとりうむ.py Written by TicTak(※現在ブログ工事中のため、見づらい点があり申し訳ないです)

【Python Coding】pandasの「isin」の使い方を解説【条件抽出が可能になる】

code python

こんにちは、ちくたっく(@tictak_py)です。

「pandasの “isin” ってどうやって使えばいいのか」

今回はそんな方向けにpythonのpandasにある機能「isin」を使って条件抽出をする方法を紹介していきます

pandasのデータフレームから欲しいデータを抽出するような場面で使えるので、データ分析に役立てたい方は参考にしてみてください。今回はどちらかというと中上級者向けの内容になりますが、初心者の方でもわかりやすいように説明していくので、基本的な部分(基本編)だけでも抑えるようにしてみてください。

こんな方に読んで欲しい記事です

  • pandasの「isin」の概要や使い方を知りたい方
  • データフレームから条件に合致するデータを抽出出来るようになりたい方

【基本編】pandasのisinを使って条件抽出をする方法

基本編では以下のステップで紹介していきます。

  • 【ステップ①】 必要ライブラリのインポート
  • 【ステップ②】 利用データの作成
  • 【ステップ③】 isinはbool型を返すことを理解する
  • 【ステップ④】 isinの使い方を知る

まずは必要ライブラリをインポート【ステップ①】

まず最初に、今回使うライブラリをインポートしておきます。
今回はpandasだけ使っていくので、以下ライブラリのインポートをしておいてください。

import pandas as pd

利用データを作成しておく【ステップ②】 

基礎編では、手元にあるタイタニックのデータを使っていきたいと思います。

今回は、pandasの「isin」の使い方を理解することが目的なので、データ自体は何でもOKです。手元にあるデータもしくはオリジナルデータを作って、挙動を確認してみてください。

data = pd.read_csv('./data/titanic-train.csv',encoding='utf-8')
data.head()
基礎で使うデータセット(タイタニック)

上記データを用いて、「isin」のコードを確認していきます。

isinはbool型を返すことを理解しておく【ステップ③】 

ステップ④でisinの使い方を紹介する前に、これだけは知っておいて欲しい点をお伝えしておきます。それは「isin」を使った結果は「bool型」を返すということです。

ある値がデータフレームやシリーズの中にあるかを確かめた結果、その値が存在すれば「True」を返し、その値が存在しなければ「False」を返すということです。

これを頭に入れた上で、実際の使い方を見ていきましょう。

isinを実際に使えるようにする【ステップ④】

タイタニックデータにはいくつかカラムがありますが、まず手始めに「男性」のデータが含まれているかを確認してみます。具体的なコードは以下のようになります。

data['Sex'].isin(['male'])

上記のようにコードを書くことで、
・ 男性(male)が含まれている行は「True」を返す
・ 男性(male)が含まれていない行(=女性/Female)は「False」を返す

ということになります。

これを使って、男性だけのデータを表示させることも可能です。

flag = data['Sex'].isin(['male'])
data[flag].head()
isinを使って「男性」のデータだけを表示した結果

同じように、別のカラムを使ってデータを抽出してみます。
今度は、生存者を意味する「Survived」が「1」のデータを取得していきます。

data['Survived'].isin([1])

先ほどは文字列を指定しましたが、今回は数値を指定するだけの違いとなります。
結果、「True」「False」が表示されているので、先ほどと同様に「True」データのみを表示させましょう。

flag = data['Survived'].isin([1])
data[flag].head()
isinを使って「生存者」のデータだけを表示した結果

「Survived」がすべて「1」になっているのがわかりますね。

以上が、pandasの「isin」に関する基本的な使い方となります。

「条件式を用いる方法」や「in演算子を用いる方法」と実質的に同じ効果となりますが、色々な方法を比較検討して自分が使いやすい方法を用いるようにしてみてください。

【応用編】pandasのisinを使って条件抽出をする方法

最後に、個人的によく使う方法を紹介しておきたいと思います。

応用編という程ではないかもしれませんが、「こんな使い方もあるのね」と思って頂ければうれしいです。具体的にどのような場面で使うかというと、時系列データを扱うようなケースです。

飲食店の会社から「販売量予測」を依頼された場合を想定

今回はこういったケースを想定してみたいと思います。

需要予測をするには複合的な要因を紐解く必要があるのでかなり難しいですが、需要予測に影響を与えている要因の一つとして「平日か週末か」が考えられます。週末だと休みの方が多いので、相対的に需要は増える傾向にありますよね。

そこで今回は、日付データを参照しつつ「週末フラグ」を作成することを目的に「isin」を使ってみたいと思います。まずは、以下のように日付データを用意しておきます。

#日付データを用意
s1 = pd.Series(pd.date_range(start="2020-01-01",periods=366,name="Date"))
s2 = pd.Series([f"day-{i}" for i in range(1,367)],name="day-N")

df = pd.concat([s1,s2],axis=1)
df["weekday1"] = df["Date"].dt.day_name()
df["weekday2"] = df["Date"].dt.dayofweek

df.head(10)
日付データを作成

上記データをもとに新しい列を作って、週末である「Saturday」や「Sunday」にフラグ立てをしていくイメージです。「isin」の使い方を理解していれば、以下のようなコードで実現することが出来ます。

#週末flagの作成
flag = df["weekday2"].isin([5,6])
df["weekend_flag"] = flag.astype(int)
df.head(10)
isinを用いて、週末フラグ(weekend_flag)を作成した結果

結果、週末(Saturday / Sunday)の部分に「1」のフラグを立てることが出来ましたね。あとはこの特徴量を使って、モデル構築やデータ予測をしていくことになります。

上記は一例ですが、このような使い方も出来るという紹介でした。

さいごに

今回は、pythonのpandasにある「isin」を用いてデータフレームから条件に合致するデータを抽出する方法を紹介してきました。

記事内でもお伝えしましたが、「isin」と同じような結果となる書き方はあるので、自分の使いやすい方法を是非見つけてみてください。

今回の記事がデータ分析向上の助けになればうれしいです。