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

目次

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

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

あわせて読みたい
Pythonのデータ解析支援ライブラリPandas 〜その12 欠損値nanをもつデータの取り扱いの基本:.isnull()...
Pythonのデータ解析支援ライブラリPandas 〜その12 欠損値nanをもつデータの取り扱いの基本:.isnull()...【データ解析支援ライブラリPandas】前回は欠損値nanをもつダミーデータを作成するため、ダミーデータ作成プログラムをアップデートしました。https://3pysci.com/pytho...

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

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

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

あわせて読みたい
Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた ...
Pythonでファイル数、行数、列数を指定してダミーデータのファイルを生成するプログラムを作ってみた ...【nanとは?】今回は前に作成したダミーデータのファイルを生成するプログラムをアップデートしていきます。https://3pysci.com/python-matplotlib-26/アップデートする...

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

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で自分で関数を定義する方法 その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を置き換えるのに、平均値とか中央値に置き換えるのを試してみましょう。

あわせて読みたい
Pythonのデータ解析支援ライブラリPandas 〜その14 欠損値nanを平均値や中央値で置き換え〜
Pythonのデータ解析支援ライブラリPandas 〜その14 欠損値nanを平均値や中央値で置き換え〜【データ解析支援ライブラリPandas】前回はデータ解析支援ライブラリPandasで欠損値nanの個数を数え、%表示する関数を作成しました。https://3pysci.com/python-pandas...

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

よかったらシェアしてね!

コメント

コメントする

目次
閉じる