【Python】Pandasのメソッドの紹介~欠損値の処理②~

Pythonの言語は、今ではEXCELでも利用できるようになっています。

EXCELでのPython利用は、基本的にはデータ分析の分野で利用することになるでしょう。

Pythonには、データ分析に役立つ「Pandas」というライブラリがあります。

これまでにも概要をまとめた記事(リンク)がありますが、「データフレーム」という形で「データ」を扱えるのが特徴です。

今回は「Pandas」の中でも、欠損値の処理を行うメソッドについて、まとめようと思います。

欠損値(NaN)を特定の補完

以下のメソッドで、データフレーム内のNaN値を指定した値で置き換えます。

fillna()

また引数は、以下を扱えます。

引数説明
value 辞書形式で値を指定して、NaNを埋める。
methodffill: 前の値でNaNを埋める(順方向)。
bfill: 次の値でNaNを埋める(逆方向)。
axis0:NaNがある行の1つ前/次の値で埋める。
1:NaNがある列の1つ前/次の値で埋める。
inplaceTrue:元のデータにも、変更を適用する。
False:元のデータは、変更されない。(デフォルト)
なお、Trueの時は、元のデータフレームが置き換わるので、新しい変数に代入することは無意味とされ、返り値も「None」となります。
limit NaNが連続して存在してる場合に、埋める回数を制限する。
downcast データ型を変更して値を埋める。(例: float → int)

コードサンプル:

import pandas as pd
import numpy as np

# サンプルデータ
data = {
‘A’: [1, np.nan, 3, np.nan, 5],
‘B’: [np.nan, 2, np.nan, np.nan, 5],
‘C’: [1, 2, 3, 4, 5]
}

df = pd.DataFrame(data)

# ‘value’ を指定(特定の値で埋める)
filled_value = df.fillna(value={‘A’: 0, ‘B’: 99})

# ‘method’ を指定(列方向の前の値で埋める)
filled_method = df.fillna(method=’ffill’, axis=1)

# ‘limit’ を指定(行方向の埋める回数を制限)
filled_limit = df.fillna(method=’ffill’, limit=1)

print(“元のデータフレーム:\n”, df)
print(“\n特定の値で埋める:\n”, filled_value)
print(“\n列方向の前の値で埋める’:\n”, filled_method)
print(“\n行方向の埋める回数を制限’:\n”, filled_limit)

# ‘inplace’ を指定(元のデータフレームを変更)
df.fillna(value=0, inplace=True)

print(“\n変更されたデータフレーム\n”, df)

# ‘downcast’ を指定(型を変更して埋める)
data_downcast = {
‘D’: [1, np.nan, 3, np.nan]
}
df_downcast = pd.DataFrame(data_downcast)
filled_downcast = df_downcast.fillna(value=0, downcast=’int’)

print(“\nint型に変換\n”, filled_downcast)

実行結果:

元のデータフレーム:

      A     B     C
0  1.0   NaN  1
1  NaN  2.0   2
2  3.0   NaN  3
3  NaN  NaN  4
4  5.0    5.0   5

特定の値で埋める:
A     B     C
0  1.0   99.0  1
1  0.0    2.0   2
2  3.0   99.0  3
3  0.0   99.0  4
4  5.0    5.0   5

前の値で埋める’:
A     B     C
0  1.0   1.0  1.0
1  NaN  2.0  2.0
2  3.0   3.0   3.0
3  NaN NaN  4.0
4  5.0   5.0   5.0

埋める回数を制限’:
A    B    C
0  1.0  NaN  1
1  1.0  2.0   2
2  3.0  2.0   3
3  3.0  NaN  4
4  5.0  5.0   5

変更されたデータフレーム
A    B    C
0  1.0  0.0  1
1  0.0  2.0  2
2  3.0  0.0  3
3  0.0  0.0  4
4  5.0  5.0  5

int型に変換
D
0  1
1  0
2  3
3  0

なお、int型に変換する際、元のデータの小数点以下が「0」出ない値の場合は、int変換はできません。

これは、データ分析を行う上で、意図しない情報の欠落は阻止しなければいけないためです。

コードサンプル:

import pandas as pd
import numpy as np

# ‘downcast’ を指定(型を変更して埋める)
data_downcast = {
‘D’: [1.1, np.nan, 3.3, np.nan]
}

df_downcast = pd.DataFrame(data_downcast)

filled_downcast = df_downcast.fillna(value=0, downcast=’int’)

print(“\nint型に変換\n”, filled_downcast)

実行結果:

int型に変換
     A
0  1.1
1  0.0
2  3.3
3  0.0

もし意図的に、欠落するような型変換(例:float ⇒ int)を行いたい場合は、明示的に「切り捨て」「丸め処理」を行う必要があります。

コードサンプル:

import pandas as pd
import numpy as np

# ‘downcast’ を指定(型を変更して埋める)
data_downcast = {
‘A’: [1.1, np.nan, 3.3, np.nan, 5.5]
}

df_downcast = pd.DataFrame(data_downcast)

# NaNを埋める
filled_downcast = df_downcast.fillna(value=0)

# 切り捨て処理
filled_downcast_astype = filled_downcast.copy()
filled_downcast_astype[‘A’] = filled_downcast[‘A’].astype(int)

# 丸め処理
filled_downcast_round = filled_downcast.copy()
filled_downcast_round[‘A’] = filled_downcast[‘A’].round().astype(int)

print(“\nint型に切り捨てて変換\n”, filled_downcast_astype)
print(“\nint型に丸めて変換\n”, filled_downcast_round)

実行結果:

int型に切り捨てて変換
    A
0  1
1  0
2  3
3  0
4  5

int型に丸めて変換
    A
0  1
1  0
2  3
3  0
4  6

まとめ

今回は、Pythonで扱えるライブラリの「Pandas」のメソッドについてまとめてみました。

他にも多くのメソッドが存在するため、複数の記事に渡って解説しています。

他の記事も、ぜひ参考にしてみて下さい。

スポンサーリンク