Pythonのデータ解析支援ライブラリPandas 〜その13 欠損値nanの個数、%を表示する方法と関数化〜

スポンサーリンク

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

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

Pythonのデータ解析支援ライブラリPandas 〜その12 欠損値nanをもつデータの取り扱いの基本:.isnull()、.fillna()〜
データ解析支援ライブラリPandas前回は欠損値nanをもつダミーデータを作成するため、ダミーデータ作成プログラムをアップデートしました。今回はそのnanをもつダミーデータを使って、欠損値nanの取り扱い方法の基本...

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

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

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

Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた その2:nanをランダムにもつダミーデータ作成プログラム
nanとは?今回は前に作成したダミーデータのファイルを生成するプログラムをアップデートしていきます。アップデートする方向としては「nan」という値をランダムに入れるということです。ここで疑問。「na...

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

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の個数と%を計算する関数を作成する

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

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

Pythonで自分で関数を定義する方法 その1 〜def文の基本と注意点〜
自分の関数を定義する必要性今回はpythonのdef関数に関して、解説をしていきます。プログラミングをしていくと、何度も何度も同じ処理をするプログラムを書くことがでてくることでしょう。何度も書いていくと、どうしても...

とりあえず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をコピーしました