欠損を見つける
このレッスンでできるようになること。どの列に何件の欠損があるかを数えられるようになります。
ここからの3章は前処理です。現場から届く CSV は、たいてい素直ではありません。入力し忘れた欄、二重に登録された行、金額に付いた円マーク。これらを掃除しないと、集計した数字が静かに間違います。
いちばん多いのが欠損です。CSV で値が書かれていない欄は、pandas が NaN という特別な値として読み込みます。Not a Number の略で、「値が無い」という印です。
やっかいなのは、NaN が混ざっていても pandas はエラーを出さないことです。合計を出せば NaN の行を飛ばして計算してくれます。親切なようですが、5件のうち2件が欠けている平均を「全体の平均」だと思い込むと、判断を間違えます。だから欠損は、集計の前に数えて把握するのが鉄則です。
数えるには isna() を使います。値が欠損なら True、そうでなければ False が返るので、DataFrame と同じ形の True と False の表になります。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
missing = df.isna().sum()sum() は True を1、False を0として足すので、列ごとの欠損件数が Series で返ります。この2行は前処理の入口として毎回書くことになります。
全体で何件欠けているかを知りたいときは df.isna().sum().sum() と2回続けます。1回目で列ごと、2回目でその合計です。逆に「欠損が無い」ことを確かめたいなら df.isna().any().any() が False であることを見ます。
欠損のある行を見たいときは df[df["数量"].isna()] のように、前章のブールインデックスがそのまま使えます。どんな行で欠けているのかを目で見ると、原因が分かることがあります。この演習では、列ごとの欠損件数を辞書にし、全体の欠損件数を求めます。
要件
- isna と sum で列ごとの欠損件数を求める
- by_column に列名をキーにした欠損件数の辞書を入れる
- total に全体の欠損件数を int で入れる