Menu
CoddyTech

欠損値

CoddyのMachine Learningジャーニー「データとプロット」セクションの一部。レッスン 45/60。

実際のデータには欠損があります。センサーが故障したり、クイズを受け損ねたりします。pandas は各空のセルをNaN(「数値ではない」)としてマークします:

4人の生徒と2つのクイズの表。空のセルが3つあり、NaN とマークされている:Ben は quiz1 を受け損ね、Cy と Dee は quiz2 を受け損ねた。下には、列ごとの欠損数:0、1、2

ほとんどのモデルはNaNを受け付けないため、まず欠損値の数を数えましょう。.isna()は欠損値ごとにTrueを返し、.sum()でその数を数えます:

scores = pd.DataFrame({
    "name": ["Ana", "Ben", "Cy", "Dee"],
    "quiz1": [8, np.nan, 7, 9],  # np.nan は欠損値
    "quiz2": [6, 5, np.nan, np.nan],
})
print(scores.isna().sum())

これは次のように出力します:

name     0
quiz1    1
quiz2    2
dtype: int64

次に選びます。dropna()は欠損のある行をすべて削除し、fillna(0)はそれぞれに0を書き込みます。どちらも新しいテーブルを返すので、保存しましょう。

統計ではNaNは除外されます。quiz1の平均は、既知の3つのスコアから算出した8.0です。

challenge icon

チャレンジ

中級

フィットネストラッカーのtracker.csvには、いくつかの測定値が記録されていません。トレーニングの前に、欠損値の各処理方法によって平均sleepがどう変わるか確認しましょう。スターターコードは、補完値hoursを読み込みます。

  1. 各列の欠損値の数を出力します。
  2. 欠損値を無視する場合、どの列にも欠損値がない日のみを対象とする場合、欠損値をhoursで補完する場合の3通りで、sleepの平均を小数点以下2桁に丸めて出力します。

別のトラッカーと8の場合:

day      0
steps    1
sleep    2
water    0
dtype: int64
Skipping gaps: 6.9
Complete days only: 7.0
Gaps filled with 8.0: 7.21

自分で試してみよう

import pandas as pd

tracker = pd.read_csv("tracker.csv")
hours = float(input())

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

データとプロットのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ