【Pandas】欠損値nanの個数と%を表示[Python]

  • URLをコピーしました!
目次

データ解析支援ライブラリPandas

前回はデータ解析支援ライブラリPandasで欠損値nanを判定し、カウント、特定の値に置き換える方法を解説しました。

今回はデータ解析をする際に最初に確認するnanの個数と何%のデータがnanなのかを確認する関数を作成してみましょう。

ということでまずは準備から。

データは前回と同じnanを含んだデータを用います。

データの読み込みはこんな感じ。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

df

実行結果

ということで進めていきましょう。

nanの%を計算する方法

前回、nanの数を数える方法を解説しました。

今回はさらに何%のデータがnanなのか計算できるようにしましょう。

よく使われるのは各列のnanの個数と%なので、今回は列のみ解説を行います。

まずは前回解説した個数を数える方法の復習から。

個数をカウントするのは「.isnull().sum()」ということでした。

ということでこんな感じ。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

nan_val = df.isnull().sum()

print(nan_val)

実行結果
value_1    3
value_2    1
value_3    2
value_4    2
value_5    0
dtype: int64

%を計算するには列に含まれるデータ数が必要になります。

それぞれの列のデータの個数は「len(データフレーム名.index)」でカウントできます。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

nan_val = df.isnull().sum()
total_val = len(df.index)

print(nan_val)
print(total_val)

実行結果
value_1    3
value_2    1
value_3    2
value_4    2
value_5    0
dtype: int64
10

そして%の計算は「100×nanの数/列のデータ数」なので計算してみましょう。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

nan_val = df.isnull().sum()
total_val = len(df.index)

nan_percent = 100 * nan_val/total_val

print(nan_val)
print(total_val)
print(nan_percent)

実行結果
value_1    3
value_2    1
value_3    2
value_4    2
value_5    0
dtype: int64
10
value_1    30.0
value_2    10.0
value_3    20.0
value_4    20.0
value_5     0.0
dtype: float64

それぞれの列には10個のデータが含まれていて、「value_1」はそのうち3つがnanなので30%、「value_2」はnanが1個なので10%という感じで計算できています。

nanの個数と%を計算する関数を作成する

それでは先ほどの個数と%を計算するプログラムを関数化してみましょう。

自分で関数を作る方法はこちらの記事で解説しています。

とりあえずnan_checkという名前の関数を作ってみます。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

def nan_check(df):
    nan_val = df.isnull().sum(axis=0)
    total_val = len(df.index)
    nan_percent = 100 * nan_val/total_val
    print(nan_val)
    print(total_val)
    print(nan_percent)

nan_check(df)

実行結果
value_1    3
value_2    1
value_3    2
value_4    2
value_5    0
dtype: int64
10
value_1    30.0
value_2    10.0
value_3    20.0
value_4    20.0
value_5     0.0
dtype: float64

表にしたいので、Pandasのデータフレームにしてしまいましょう。

データフレームにする方法は次回詳しく解説していきますが、とりあえず「pd.DataFrame(値のリスト, index=行名のリスト)」でデータフレームにすることができます。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

def nan_check(df):
    nan_val = df.isnull().sum(axis=0)
    total_val = len(df.index)
    nan_percent = 100 * nan_val/total_val
    nan_df = pd.DataFrame([nan_val, nan_percent], index=["No. nan", "%"])
    return nan_df

nan_check(df)

実行結果

ということで表として表示することができました。

ちなみに列数が多くなってしまった場合、縦に表示したいこともあるでしょう。

その場合は、「return nan_df」の最後に「.T」をつけます。

つまりこうなります。

import pandas as pd

df = pd.read_csv("python-pandas-14_data1.txt", index_col = 0)

def nan_check(df):
    nan_val = df.isnull().sum(axis=0)
    total_val = len(df.index)
    nan_percent = 100 * nan_val/total_val
    nan_df = pd.DataFrame([nan_val, nan_percent], index=["No. nan", "%"])
    return nan_df.T

nan_check(df)

実行結果

データフレームに「.T」をつけると表の行と列が入れ替わるということです。

もともとtranspose(転置)の頭文字の「T」から来ているようです。

これでnanの個数と%を計算するための関数を作ることができました。

次回はnanを置き換えるのに、平均値とか中央値に置き換えるのを試してみましょう。

ということで今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次