最終更新日:2022/4/10

ここでは、欠損値が何個あるのか、欠損値のある行を抽出するなど、欠損値の情報を得る方法を説明します。

【説明すること】

1. 各列の欠損値の数を調べる

各列に欠損値が何個あるか、まとめて調べる方法です。

df.isnull().sum()

と書きます。

以下のcsvファイルを読み込んで例を挙げます。株価のリターンと考えてください。

a007_001.csv

2. ピンポイントで要素が欠損値か調べる

要素をピンポイントで指定して、それが欠損値かどうか調べる方法です。

pd.isnull(df.at['index', 'clm']) または pd.isnull(df.iat[i, j])

と書きます。つまり、pd.isnull()の引数にat[]またはiat[]で要素の場所を指定します。

3. df全体を対象に欠損値かどうか調べる

df全体を対象に欠損値かどうかを調べる場合は、

pd.isnull(df)

と書きます。isnull()の引数をdf全体にします。

4. 欠損値を含む行を丸ごと抽出する

欠損値を1つでも含む”行”または”列”を丸ごと抽出する方法です。

.any()を使って、幾つかの方法を組み合わせて実現します。以下では、行と列を示しますが、.any(axis=1).any(axis=0)か、そして、列には.loc[]を使う点をしっかり意識してください。

4.1 行にフィルターをかける

欠損値を1つでも含む”行”を丸ごと抽出するには、

df[df.isnull().any(axis=1)])

と書きます。axis=1の指定が重要です。

これは行にフィルターをかけるイメージで、Excelのフィルターに近いです。

4.2 列にフィルターをかける

欠損値を1つでも含む”列”を丸ごと抽出するには、

df.loc[:, df.isnull().any(axis=0)]

と書きます。.loc[]を使う点、axis=0である点に注意してください。列方向へのフィルターはExcelには存在しない機能です。