スポンサーリンク

[Pandas]欠損値を埋める

Python

pandasで欠損値を埋める方法を解説します。

欠損値を埋める

データセット

import pandas as pd
from sklearn.datasets import load_iris
iris_data = load_iris()
df = pd.DataFrame(
    data = iris_data.data,
    columns = iris_data.feature_names,
)
df["label"] = iris_data.target
df

load_irisのデータセットを使います。

欠損値確認

df.isnull().sum()

# ===== output =====
# sepal length (cm)	0
# sepal width (cm)	0
# petal length (cm)	0
# petal width (cm)	0
# label	0

isnullで欠損値がTrueになります。その合計を取ると、列ごとの欠損値の数になります。
今回のデータでは欠損値がないので、加工して作りましょう。

import random
drop_idx = [random.randint(0, len(df) - 1) for _ in range(10)]
df.loc[drop_idx, "sepal length (cm)"] = None
df.isnull().sum()

# ===== output =====
# sepal length (cm)	10
# sepal width (cm)	0
# petal length (cm)	0
# petal width (cm)	0
# label	0

drop_idxではランダムに10個の行番号を作っています。
drop_idxに対応した”sepal length”にNoneを入れて欠損値にしました。

df.loc[drop_idx]

drop_idxに対応する行を取り出します。これで欠損していたらOKです。

欠損値を埋める

col = "sepal length (cm)"
df[col] = df[col].fillna(df[col].mean())
df.loc[drop_idx]

# ===== output =====
# 140	5.852143	3.1	5.6	2.4	2
# 13	5.852143	3.0	1.1	0.1	0
# 101	5.852143	2.7	5.1	1.9	2

fillnaで欠損値を埋めることができます。上記では平均値を入れました。
drop_idxの行を抽出すると、確かに平均値が入っていますね。

他のパターン

col = "sepal length (cm)"

#中央値
df[col] = df[col].fillna(df[col].median())

#最大値
# df[col] = df[col].fillna(df[col].max())

#最小値
# df[col] = df[col].fillna(df[col].min())

#指定値
# df[col] = df[col].fillna(-1)

中央値や最大最小などでも埋めることができます。

まとめ

今回はfillnaで欠損値を埋める方法を解説しました。
データの傾向にあわせてどんな値で埋めるか決めていきましょう。

コメント

タイトルとURLをコピーしました