LoginSignup
0
1

More than 3 years have passed since last update.

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

Posted at

見出しを追加 (38).png
こんにちは、まゆみです。

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

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

今回の記事では、

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

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

本文を追加 (6).png

例えば、

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

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

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

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

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

今回使うデータ

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

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

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

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

スクリーンショット 2021-03-20 092008.jpg

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と返されました。

スクリーンショット 2021-03-20 121600.jpg

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

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

となります

スクリーンショット 2021-03-20 122312.jpg

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

本文を追加 (7).png

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

今回は 

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

を取り出しましたが、

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

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

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

dd/mm/yyyy

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

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

① to_datetime()メソッド

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

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

1.) to_datetime()メソッド

スクリーンショット 2021-03-20 092545.jpg
引用元:Pandasドキュメント

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

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

スクリーンショット 2021-03-20 093818.jpg

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

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

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

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

before.png

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

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

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

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

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

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

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

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

スクリーンショット 2021-03-20 115837.jpg

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

スクリーンショット 2021-03-20 120352.jpg
引用元:Pandasドキュメント

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

なので

parse_date = "birth_of_date" ではなく

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

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

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

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

nfl["date_of_birth"]

スクリーンショット 2021-03-20 094922.jpg

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

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

となります

スクリーンショット 2021-03-20 125658.jpg

ここでも

DataFrame[ 条件文 ]

となっています

まとめ

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

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1