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について書いていきますね。
Author And Source
この問題について(PandasのDataFrameから条件に合うrowを抽出する方法をスクショ付きで解説 no.15), 我々は、より多くの情報をここで見つけました https://qiita.com/Mayumi_Pythonista/items/8af7c687e35003687711著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .