筋肉で解決しないために。

日々出会うモノに対する考察をしたり、主に以下のテーマに関して書いています。 データサイエンス/人工知能/AI/機械学習/DeepLearning/Python//数学/統計学/統計処理

pandas入門7_「欠損値の扱い」

こんにちは、ワタルです。

さっと見て、「あぁそうだったそうだった」と確認できるハンドブックのような存在を目指して。

pandas入門第7回目、「欠損値の扱い」です。

今回の学習内容

今回は、欠損値が含まれたデータに対して、様々な対応の方法を学んでいきます。

今回学ぶ関数

今回は、以下の関数について学びます。

series.isnull()(欠損値を見つける)
series.dropna()(欠損値を取り除く)
dataframe.dropna()(dataframeの欠損値を取り除く)
dataframe.drop(how='all')(全てが欠損値の行を落とす)
dataframe.dropna(axis=1)(欠損値を含む列を落とす)
dframe.dropna(thresh=n)(欠損値でない要素が決めた閾値数以上の行のみ表示する)
dframe2.fillna(n)(欠損値を任意の数字で埋める)

おまじない

import numpy as np
from numpy import nan
from pandas import Series,DataFrame
import pandas as pd

series.isnull()(欠損値を見つける)

#欠損値の含まれたseriesをつくります

data = Series(['one','two', np.nan, 'four'])
data

>>>
0     one
1     two
2     NaN
3    four
dtype: object
#null値を見つけます。

data.isnull()

>>>
0    False
1    False
2     True
3    False
dtype: bool

series.dropna()(欠損値を取り除く)

data.dropna()

#欠損値の含まれていたindexが2の要素がなくなっていることがわかります

>>>
0     one
1     two
3    four
dtype: object

dataframe.dropna()(dataframeの欠損値を取り除く)

#seriesと同様にdataframeでも同じことができます

#まずはdataframeをつくります

dframe = DataFrame([[1,2,3],[np.nan,5,6],[7,np.nan,9],[np.nan,np.nan,np.nan]])
dframe

>>>
    0  1  2
0  1.0 2.0 3.0
1  NaN 5.0 6.0
2  7.0 NaN 9.0
3  NaN NaN NaN
dframe.dropna()

#欠損値の含まれていないindexが0の行だけ残っていることがわかります

>>>
    0  1  2
0  1.0 2.0 3.0

dataframe.drop(how='all')(全てが欠損値の行を落とす)

dframe.dropna(how='all')

#引数にhow='all'を指定したことで、全てが欠損値の行だけなくなっていることがわかります

>>>
    0  1  2
0  1.0 2.0 3.0
1  NaN 5.0 6.0
2  7.0 NaN 9.0

dataframe.dropna(axis=1)(欠損値を含む列を落とす)

dframe.dropna(axis=1)

#どの列にも1つは欠損値があるので、すべての列がなくなっていることがわかります

>>>
0
1
2
3

dframe.dropna(thresh=n)(欠損値でない要素が決めた閾値数以上の行のみ表示する)

#別のdataframeをつくります

dframe2 = DataFrame([[1,2,3,np.nan],[2,np.nan,5,6],[np.nan,7,np.nan,9],[1,np.nan,np.nan,np.nan]])
dframe2

>>>

    0  1   2   3
0  1.0 2.0 3.0 NaN
1  2.0 NaN 5.0 6.0
2  NaN 7.0 NaN 9.0
3  1.0 NaN NaN NaN
#nullではない値が2個以上存在する行のみ表示していることがわかります
#つまり、index = 3の行がなくなっています

dframe2.dropna(thresh=2)

>>>
    0  1   2   3
0  1.0 2.0 3.0 NaN
1  2.0 NaN 5.0 6.0
2  NaN 7.0 NaN 9.0

dframe2.fillna(n)(欠損値を任意の数字で埋める)

#欠損値を1で埋めてみます

dframe2.fillna(1)


>>>
    0  1   2   3
0  1.0 2.0 3.0 1.0
1  2.0 1.0 5.0 6.0
2  1.0 7.0 1.0 9.0
3  1.0 1.0 1.0 1.0

列ごとに埋める値を決める

#0列目の欠損値には0を、1列目の欠損値には1を、というように埋めてみます

dframe2.fillna({0:0,1:1,2:2,3:3})

>>>
    0  1   2   3
0  1.0 2.0 3.0 3.0
1  2.0 1.0 5.0 6.0
2  0.0 7.0 2.0 9.0
3  1.0 1.0 2.0 3.0

終わりに

今回は、欠損値が含まれたデータに対して、様々な対応の方法について学びました。

お疲れ様でした!

次回はこちら

watarumon.hatenablog.com

それじゃー、また。