欠損値
CoddyのMachine Learningジャーニー「データとプロット」セクションの一部。レッスン 45/60。
実際のデータには欠損があります。センサーが故障したり、クイズを受け損ねたりします。pandas は各空のセルをNaN(「数値ではない」)としてマークします:
ほとんどのモデルは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です。
チャレンジ
中級フィットネストラッカーのtracker.csvには、いくつかの測定値が記録されていません。トレーニングの前に、欠損値の各処理方法によって平均sleepがどう変わるか確認しましょう。スターターコードは、補完値hoursを読み込みます。
- 各列の欠損値の数を出力します。
- 欠損値を無視する場合、どの列にも欠損値がない日のみを対象とする場合、欠損値を
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())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
データとプロットのすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ