最終更新日:2022/4/10
ここでは、欠損値が何個あるのか、欠損値のある行を抽出するなど、欠損値の情報を得る方法を説明します。
【説明すること】
- 1. 各列の欠損値の数を調べる :
df.isnull().sum() - 2. ピンポイントで要素が欠損値か調べる :
pd.isnull(df.at[index,'clm1']) - 3. df全体を対象に欠損値かどうか調べる :
pd.isnull(df) - 4. 欠損値を含む行を丸ごと抽出する :
- 4.1 行にフィルターをかける:
df[df.isnull().any(axis=1)] - 4.2 列にフィルターをかける:
df.loc[:, df.isnull().any(axis=0)]
- 4.1 行にフィルターをかける:
1. 各列の欠損値の数を調べる
各列に欠損値が何個あるか、まとめて調べる方法です。
df.isnull().sum()
と書きます。
以下の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には存在しない機能です。
