LoginSignup
0
1

More than 3 years have passed since last update.

Pandasでの欠損値の処理の仕方を集めてみた no.13

Posted at

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

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

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

今回の記事では、データのなかに欠損値があった時の処理方法を色々と書いていこうと思います。

今回使うデータについて

スクリーンショット 2021-03-18 112844.jpg
引用元:kaggle.com

今回はkaggle.comさんのサイトからカナダのバンクーバーの犯罪についてのデータを使って欠損値の処理の例を書いていきます

いつも通り、read_csv()メソッドを使ってCSVファイルを読み込みました。

(CSVファイルの読み込み方が分からない方はこちらの記事を参考にどうぞ)

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

スクリーンショット 2021-03-18 111821.jpg

2003年から2017年までのデータなので、かなり膨大なrowの数値になっています。

データのところどころに書いてある『NaN』が欠損値を表しています。

dropna()メソッド

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

dropna()メソッドはPandasドキュメントに書いてあるように様々なパラメーターを取ることができます。

このパラメーターにどのような引数を取るかで、削除の仕方が変わってきますので、それぞれのパラメーターを一つづつ説明していきますね。

では具体的にコードを書きながら説明します

dropna() メソッドのパラメーター how

スクリーンショット 2021-03-18 114645.jpg

パラメーターhow には引数に 

"any" か

"all" を取ることができます

"any"は『どんな欠損値でもある限りは』ということを意味し、『NaN』が一つでも存在する row は削除されます。

上の実行結果のスクショを見ていただくと分かると思いますが、インデックス番号530649には 『NaN』が一つ以上存在しているので、コードの実行結果では、そのrow が削除されています

次に、引数を"all" にした場合を説明します。

"all"を引数に取ると、row の全ての項目が『NaN』ではない限り、削除されることはありません。
コラム名で言うと、右端の『TYPE』から左端の『LONGTITUDE』まで全てが『NaN』の場合のことです。

パラメーターsubset

例えば、今回のデータでコラム名が『"NEIGHBOURHOOD"』に欠損値があるデータは削除したいけど、他のコラムに欠損値があっても使いたいとします

そのような時にsubsetの引数に『"NEIGHBOURHOOD"』とコラム名を書きます

『"NEIGHBOURHOOD"』以外のコラムに『NaN』があっても、そのrow は削除されません。

スクリーンショット 2021-03-19 062257.jpg

パラメーターinplace

inplace はこちらの記事でも詳しく説明しています。

inplace = False がデフォルト値であり、デフォルトではinplace されません。

そのinplace とはどういうことかというと、元々のオリジナルのDataFrame をdropna() で実行した結果で上書きするというパラメーターです。

例を取って説明します

スクリーンショット 2021-03-19 063353.jpg

ただ、

inplace= True

に変えますと、下記のようになります

スクリーンショット 2021-03-19 063651.jpg

パラメーターaxis

1.png

axis は軸のことで、デフォルト値0はインデックスを表します。

axis=1

に変えますと、軸が縦方向に変わり、コラムのなかに『NaN』があるかどうかをPandas が探してくれて、そのコラムを削除してくれます。

スクリーンショット 2021-03-19 070458.jpg

columns の数が、8まで減っています

欠損値があるrow やcolumnを削除する方法はこれくらいで終わりにします。

では次に、削除するのではなく、『欠損値だと分かるように何かで穴埋めしたい時』はどうしたら良いのでしょうか?

その方法を次に書いていきますね。

fillna()メソッド

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

NA/NaNの値になっている部分を埋めてくれます。

スクリーンショット 2021-03-19 072028.jpg

上記のスクショには、コラム名『HOUR』『MINUTE』『NEIGHBORHOOD』に『NaN』の欠損値をもつrow があります。

ただ、HOUR や MINUTE は 『0』で穴埋めしたいけど『NEIGHBORHOOD』は『UNKNOWN』と穴埋めしたいとします。

DataFrame名[_コラム名_].fillna(埋めたい数値or文字列).png

ただこのままですと、オリジナルのDataFrameを呼び出した時には、また元のデータに戻ってしまうので、パラメーターinplace = True とします

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

スクリーンショット 2021-03-19 073712.jpg

さらに、NEIGHBORHOOD のNaN をunknown にして欠損値を穴埋めします

スクリーンショット 2021-03-19 074057.jpg

HOURの欠損値が0で上書きされたまま、さらにNEIGHBOURHOOD の欠損値も書き換えることができました。

まとめ

今回は欠損値の処理の仕方を色々と集めてみました。

次回の記事では、データの並べ替えについて書いていきたいと思います

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