PandasのDataFrameから条件に合うrowを抽出する方法をスクショ付きで解説 no.15



こんにちは、まゆみです。

Pandasについてシリーズで記事を書いています。

今回の記事は第15回目になります。

今回の記事では、

Pandas のDataFrameオブジェクトから、あなたの条件に合うようなrow (行)を取り出すにはどうしたら良いか

を書いていこうと思います

例えば、

gender コラムのなかが『male』の値になっている行を取り出したり

salary コラムの値が300以上の行を取り出したり

と言った風に条件に合うものを取り出す方法を書いていきます

年月日のフォーマットを変更して、年月日を基準にした行の取り出し方も紹介します
(例えば、1990年以前に生まれた選手を取り出したいというような場合。)
ので、是非じっくりと読み進めてみてください。

ではさっそく始めていきます

今回使うデータ

今回も前回と同じく、National Football Leagueの選手のデータを使わせていただきます。

まずCSVデータを読み込みます

(CSVデータの読み込み方が分からない方はこちらの記事をどうぞ)
※Series ではなく、DataFrame を使いたいので、CSVデータの読み込みまでしてください。

実行結果は下のようになります

height_in_inchesから条件に合ったrow を抽出する

height_in_inches(インチ表示の身長)のコラムから、75インチの選手のデータを抽出してみましょう

まず、このDataFrame のなかでも特に『height_in_inches』のコラムだけを使いたいので

nfl["height_in_inches"]

ですね。

その値が75と等しい部分なので

nfl["height_in_inches"] == 75

となります

すると、値が75になっている部分がTrue、それ以外がFalseと返されました。

そして値がTrueになっているrow だけを取り出したいので

nfl[ nfl["height_in_inches"] == 75 ]

となります

今のプロセスを簡単に図にすると以下のようになります

①の部分に条件文を書けば、あなたの課した条件に合致するrow が取り出される仕組みになります。

今回は 

『==』を使い、○○と一致する条件を満たすもの

を取り出しましたが、

『!=』『>=』なども①の部分に条件として書くことができます

生年月日に条件付けをして条件に合うrow を抽出する

当CSVデータではdata_of_birth のコラムが

dd/mm/yyyy

というフォーマットで書かれているので、これをPandas で分析できるフォーマットに書き換えないといけません。

それには2つの選択肢があります。

① to_datetime()メソッド

② read_csv()のパラメータparse_datesの引数を変える

一つづつ説明していきます。

1.) to_datetime()メソッド


引用元:Pandasドキュメント

date_of_birth を.to_datetime()で形式を変更して、さらに、同じコラム名に代入して、上書きをしました。

実行結果は下のようになります

オリジナルのデータの『date_of_birth』のコラムが新しい形式に変えられました。

to_datetime()を使うと、データ型はどう変わる?

to_datetime()によって、Pandasで分析をできる形式のデータに変えることができると先ほど申し上げましたが、具体的に、データ型がどのように変わるのかをここで、お見せしますね。

(info()メソッドを使うと、DataFrameの概要を見ることができます)

before に書いているのが、オリジナルのデータの概要です。

date_of_birth はobject と書いていますが、objectとはPandasのなかのstringのようなものになります

after のdate_of_birthをみると、datetime64[ns]と書いています

データ型が変わったのが分かると思います

2.) read_csv()のパラメータparse_datesの引数を変える

次に紹介するやり方をすると、先に紹介したやり方よりも少ないコードで済みます。

.read_csv(parse_dates = ["コラム名"])

実行結果は下記のようになります

ここで一つ注意点があります


引用元:Pandasドキュメント

例え1つのコラムだけ、datetime オブジェクトにしたい時であっても、引数はリスト型で書かなければいけません。

なので

parse_date = "birth_of_date" ではなく

parse_date = ["birth_of_date"] と角括弧が要ります。

1990年以降に生まれた選手のデータを抽出する

まず、nfl という変数に代入されているのはDataFrame全体ですね。

そこから、date_of_birth のコラム名がついた部分だけを取り出します

nfl["date_of_birth"]

このnfl["date_of_birth"] で"1990" より大きい数字をはじき出すわけですから

nfl["date_of_birth"] >= "1990-01-01"

となります

ここでも

DataFrame[ 条件文 ]

となっています

まとめ

今回の記事はこれくらいで終わりにします。

次回も引き続きPandasについて書いていきますね。