Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでデータフレーム内の欠損値が最も少ない列を見つける方法

pandasのデータフレームを扱っていると、各列に含まれる欠損値(NaN)の数を確認し、その中で最も欠損値が少ない列を特定したい場面があります。

例えば、以下のようなデータフレームがあった場合、欠損値の数が最小の列は「Id」です。

DataFrame is:
    Id    Salary    Age
0 1.0   20000.0   22.0
1 2.0   NaN       23.0
2 3.0   50000.0   NaN
3 NaN   40000.0   25.0
4 5.0   80000.0   NaN
5 6.0   NaN       25.0
6 7.0   350000.0  26.0
7 8.0   55000.0   27.0
8 9.0   60000.0   NaN
9 10.0  70000.0   24.0
lowest missing value column is: Id

この問題を解決するために、以下の手順で進めていきます。

解決手順

  • Id、Salary、Age の3つの列を持つデータフレームを定義します。

  • df.apply() の中にlambda関数を設定し、各行のNULL値の合計数を集計します。

df = df.apply(lambda x: x.isnull().sum(),axis=0)
  • 最後に、df.idxmin() を使って、欠損値の数が最小となる列名を出力します。

df.idxmin()

サンプルコード

それでは、実際のコードを見てみましょう。処理の流れがより理解しやすくなります。

import pandas as pd
import numpy as np
df = pd.DataFrame({'Id':[1,2,3,np.nan,5,6,7,8,9,10],
'Salary':[20000,np.nan,50000,40000,80000,np.nan,350000,55000,60000,70000],
        'Age': [22,23,np.nan,25,np.nan,25,26,27,np.nan,24]
        })
print("DataFrame is:\n",df)
df = df.apply(lambda x: x.isnull().sum(),axis=0)
print("lowest missing value column is:",df.idxmin())

出力結果

DataFrame is:
    Id    Salary    Age
0 1.0   20000.0   22.0
1 2.0   NaN       23.0
2 3.0   50000.0   NaN
3 NaN   40000.0   25.0
4 5.0   80000.0   NaN
5 6.0   NaN       25.0
6 7.0   350000.0  26.0
7 8.0   55000.0   27.0
8 9.0   60000.0   NaN
9 10.0  70000.0   24.0
lowest missing value column is: Id

コードの解説

このコードでは、まず lambda x: x.isnull().sum() により、各列ごとに欠損値の個数をカウントしています。axis=0 を指定することで、行方向ではなく列方向に適用される点に注意してください。

続いて idxmin() メソッドを使用することで、最小値を持つ列のインデックス(列名)を取得できます。この例では、Id列の欠損値が1件のみであるため、「Id」が出力されます。

  1. 【Python】ソート済みリストからk番目に欠けている数を効率的に求める方法

    ソートされた重複のない整数リスト nums と整数 k が与えられたとき、リストの最初の要素を基準にして、k番目(0始まりのインデックス)に相当する欠落した数を見つける問題を考えてみましょう。 問題の例 例えば、nums = [5,6,8,10,11]、k = 1 という入力の場合を確認します。このリストには「7」と「9」という2つの数が欠けています。7がインデックス0(1番目)の欠落数、9がインデックス1(2番目)の欠落数に対応するため、k = 1 のときの出力は 9 となります。 解決のためのアプローチ この問題は、隣り合う要素同士の差に注目することで解けます。各間隔にいくつの数が欠け

  2. Pythonで整数の2進表現に含まれる1のビット数を数える方法

    ある整数 n が与えられたとき、その数を2進数で表した際に含まれる「1」のビット(セットビット)の個数を求めることを考えます。この問題は「ポピュレーションカウント」や「ハミング重み」と呼ばれることもあり、ビット演算の基礎を学ぶのに最適な題材です。問題の例例えば、入力が 12 の場合を考えてみましょう。12 を2進数で表すと 1100 となり、「1」のビットは2個含まれています。したがって、出力は 2 になります。解法のアプローチこの問題は、次の手順で解くことができます。カウンター変数 count を 0 で初期化するn が 0 になるまで以下を繰り返すn の最下位ビット(n AND 1)を c