0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pandasで欠損値処理!fillnaとdropnaの使い分けと実例

Posted at

データ分析をしていると必ず出会う「欠損値(NaN)」。Pandasには、欠損値を効率的に処理するためのメソッド fillna()dropna() が用意されています。

欠損値とは?

欠損値(NaN: Not a Number)は「データが存在しない状態」を表します。
例:アンケートの未記入、センサーの異常値など。

import pandas as pd
import numpy as np

# サンプルデータ(欠損値含む)
data = {
    '氏名': ['佐藤', '田中', '鈴木', '高橋'],
    '年齢': [28, np.nan, 35, 32],
    '出身地': ['東京', '大阪', np.nan, '名古屋']
}

df = pd.DataFrame(data)

print("▼ 元のデータ")
print(df)

出力:

▼ 元のデータ
   氏名    年齢  出身地
0  佐藤  28.0   東京
1  田中   NaN   大阪
2  鈴木  35.0  NaN
3  高橋  32.0  名古屋

dropna():欠損値を含む行や列を削除する

行単位で削除(デフォルト)

df.dropna()
     氏名    年齢   出身地
0   佐藤  28.0   東京
3   高橋  32.0  名古屋

列単位で削除

df.dropna(axis=1)
	氏名
0	佐藤
1	田中
2	鈴木
3	高橋

特定の列だけを条件に削除

df.dropna(subset=['年齢'])

    氏名	年齢	出身地
0	佐藤	28.0	東京
2	鈴木	35.0	NaN
3	高橋	32.0	名古屋

fillna():欠損値を補完する

固定値で埋める

df.fillna({'年齢': 30, '出身地': '不明'})
     氏名   年齢  出身地
0   佐藤  28.0   東京
1   田中  30.0   大阪
2   鈴木  35.0   不明
3   高橋  32.0  名古屋

平均値で埋める(年齢列)

df['年齢'] = df['年齢'].fillna(df['年齢'].mean())
print(df)
   氏名         年齢  出身地
0  佐藤  28.000000   東京
1  田中  31.666667   大阪
2  鈴木  35.000000  NaN
3  高橋  32.000000  名古屋

欠損の有無を確認する

df.isnull()        # True/Falseで欠損の有無を表示
df.isnull().sum()  # 各列の欠損数
df[df['年齢'].isnull()]  # 特定列の欠損行を抽出

欠損率を確認

df.isnull().mean() * 100
        0
氏名	0.0
年齢	25.0
出身地	25.0

dtype: float64

まとめ

  • dropna()で欠損行や列を削除できる
  • fillna()で柔軟に補完できる(固定値・平均・前後など)
  • 欠損率のチェックや可視化と組み合わせるとさらに効果的
0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?