最終更新日: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には存在しない機能です。