導入
現実のデータには、値が抜けている「欠損値(NaN)」がつきものです。これを放置すると集計が狂うので、見つけて対処する方法を学びます。
説明
欠損は NaN(Not a Number)で表されます。isna() で「どこが欠損か」、isna().sum() で「列ごとの欠損数」が分かります。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name": ["A", "B", "C", "D"],
"score": [80, np.nan, 70, np.nan],
})
print(df)
print("--- 欠損の数 ---")
print(df.isna().sum())
対処は主に2つ。fillna(値) で埋めるか、dropna() でその行を捨てるかです。
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name": ["A", "B", "C", "D"],
"score": [80, np.nan, 70, np.nan],
})
print("--- 平均で埋める ---")
print(df.fillna(df["score"].mean()))
print("--- 欠損行を捨てる ---")
print(df.dropna())
欠損を平均値で埋める fillna(df["score"].mean()) は、データを減らさずに済む定番の手当てです。どちらを選ぶかは分析の目的しだいです。
ちなみに、
mean()などの集計は欠損を自動で無視して計算してくれます。とはいえ、欠損の有無は必ず自分の目で確認しておくのが安全です。
やってみよう
df.fillna(0) で欠損を0埋めしたときと、平均で埋めたときで、score の平均がどう変わるか比べてみましょう。
演習
上の df について、dropna() で欠損のある行を取り除いた表を表示してください。
ヒント1を見る
df.dropna() をそのまま print します。