---
title: #11 欠損値の見つけ方・削除方法
tags: 
author: [猫のタロー](https://convert.docswell.com/user/Cat_Taro)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VEPX3RXQJ8.jpg?width=480
description: データサイエンス体験動画「データサイエンス　チュートリアル　猫のタロー編」の第11回目は、Section 9「欠損値の見つけ方・削除方法」です。  データには、カラムに何も要素の無い「欠損値」が存在することがあります。欠損値があると、機械学習のプログラムにはエラーになってしまうものがあるため、欠損値を見つけ、欠損値を含む行、列を除去する必要があります  ⑲ データ名.iloc[行番号 :  ] ⑳ データ名.isna().sum() ㉑ データ名.dropna()  同時に、開始位置と終了位置などを指定する「スライス」に関して、便利な使い方がありますので、参考資料をブログに掲載しておきます！  ■この動画のブログ  データサイエンス チュートリアル https://tutorial4datascience.blogspot.com/
published: September 07, 23
canonical: https://convert.docswell.com/s/Cat_Taro/5DEM16-2023-09-07-221047
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VEPX3RXQJ8.jpg)

1
1st STEP ビッグデータの
読み込みとデータの確認
Section ９
欠損値の見つけ方・削除方法
⑲ データ名.iloc[行番号 : ]
⑳ データ名.isna().sum()
㉑ データ名.dropna()
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/27VL4RLPEQ.jpg)

2
Section 9 欠損値の見つけ方・削除方法
１．ソートで欠損値を見つける
データには、カラムに何も要素がない「欠損値」が存在することがあります。欠損値は、
Pythonでデータを読み込んだ時に、「NaN」と表示されます。「Not a Number」の略で
す。欠損値があると、機械学習のプログラムがエラーになってしまうものがあるため、欠損
値の存在を検知することが必要となってきます。
⑰ データ名.sort_values(“列名”,ascending=False)を使って、欠損値があるかどうかを
見てみましょう。「sort_values」は、文字列でも使えます。
「sort_values」を使うと、欠損値（NaN）は、デフォルトでは末尾に並べられます。
ただし、数値と文字列が混在している列や、数字（の文字列）とアルファベットが混在し
ている列、記号が使われている列は、ソートできません。
→ 「id_pos3」の場合、「InvoiceNo」、「StockCode」、「Description」などは
ソートができません。


# Page. 3

![Page Image](https://bcdn.docswell.com/page/5JGX1MXQ7L.jpg)

3
Section 9 欠損値の見つけ方・削除方法
２．「行番号」でデータを抽出
「iloc」を使うと、「行番号」、「列番号」（インデックス）で指定し、特定の値を抽出でき
ます。「行番号」のみの指定もできます。
０行目から、５行目までを指定する場合は、「:」を使って、「0 : 5」と[ ]内に記載します。
この場合、「0」が開始位置、「5」が終了位置となっています。このように「:」を使って選択
範囲を指定する方法を「スライス」と呼びます。
「:」の次に何も記載しないと（終了位置を指定しないと）、開始位置から最後まで指
定することができます。わかりやすいように、半角スペースを入れても大丈夫です。
⑲ データ名.iloc[行番号 : ]
→データの指定する行番号以降のデータを抽出することができます。


# Page. 4

![Page Image](https://bcdn.docswell.com/page/47Q8DR8WEP.jpg)

4
Section 9 欠損値の見つけ方・削除方法
参考：スライス
スライスは、範囲を指定するもので、[開始 : 終了]で指定することができます。
開始、および終了には、 「行番号」の他に、「”行ラベル”」も使用することができます。
記入しない場合は、開始は０（すなわち先頭）、終了は末尾となります。例えば、
[0 : 3]とすれば、最初の行から始まって、4番目の行までを指定することになります。
前から数える場合は0始まりますが、後ろから数える場合は-1始まりとなります。例えば、
[0 : -3]とすれば、最初の行から始まって、最後の行から数えて3番目までを指定すること
になります。
また、 「:」を続けて[開始 : 終了 : ステップ]とすることもできます。
ステップでは、いくつずつ要素を取得していくかを指定することができます。例えば「3」と
記入すれば、「〇, ×, ×, 〇, ×, ×, … 」のように２つ飛ばしで要素を取得します。記入
しない場合は、１となります（飛ばさないで指定）。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/KE42Z82171.jpg)

5
Section 9 欠損値の見つけ方・削除方法
３．欠損値のカウント
行の要素に欠損値があるかどうかを検出するには、「isna()」と「sum()」を組み合わせ
て行います。
⑳ データ名.isna().sum()
→「isna()」は、各要素に対して判定を行い、欠損値NaNであればTrue、欠損
値でなければFalseを表示します。
行・列ごとに欠損値の個数をカウントするには、「isna()」にコロンで続けてsum()
を用います。 sum()は、本来、合計値を求める関数ですが、True=1, False=0と
して処理されるため、合計値が欠損値の個数となります。
Section ７の⑭でも解説したように、sum(axis=0)は列名、すなわち縦に見て、
欠損値の個数をカウントします。sum(axis=1)は行、すなわち横に見て欠損値の
個数をカウントします。 sumは「axis=0」がデフォルトのため、sum()でも構いま
せん。


# Page. 6

![Page Image](https://bcdn.docswell.com/page/L71MR2M5JG.jpg)

6
Section 9 欠損値の見つけ方・削除方法
４．欠損値を含む行の削除
分析する際は、欠損値を含むデータを削除することがよくあります。欠損値を含む行を削
除するには、㉑を使います。
㉑ データ名.dropna()
→欠損値を1つでも含む行を削除します。デフォルトで「axis=0」となっていますので、
()内は空欄で構いません。ここで、dropna(axis=1)とすると、欠損値を1つでも含む
列を削除します。
→また、（）内に「how=’all’」と記入するとすべてが欠損値（すなわち、要素が
ない）の行、または列を削除します。
→この処理を行っても、元のデータは変更されません。
()内に「inplace=True」とすれば、元のデータを変更することができます。
元のデータを残しておきたい場合は、⑱で行ったように別のデータ名を宣言してお
きましょう。


# Page. 7

![Page Image](https://bcdn.docswell.com/page/G7W31R3W72.jpg)

7
Section 11 dropna()を使った欠損値を含む行の削除
参考： dropna()の応用
「dropna()」の（）内に下記ような記入を行うと、様々なパターンで欠損値を含む行、
列を削除できます。
●「axis=1」を記入すると、一つでも欠損値を含む列を削除
【書き方】 dropna(axis=1)
●「how=“all”」を記入すると、すべてが欠損値である行を削除します。
【書き方】 dropna(how=“all”)
●「subset=[“列名1”, “列名2”]」を記入すると、「”列名1”」と「“列名2”」
に一つでも欠損値がある行を削除します。
【書き方】 dropna(subset=[“列名1”, “列名2”])


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4JZVPRV273.jpg)

8
Section 9 欠損値の見つけ方・削除方法
⑰ データ名.sort_values(“列名”,ascending=False)
id_pos3の列「CustomerID」が、文字列（object）であることが確認できましたが、
「⑰ データ名.sort_values(“列名”,ascending=False)」で、 「CustomerID」をソート
（並び替え）してみましょう。
「NaN」は、「Not a Number」
の略で、入力された数字がない時
などに表示されるものです。
どうやら、「CustomerID」が未記
入、すなわちエラーが含まれている
ようです。


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YE65MRY6JV.jpg)

9
Section 9 欠損値の見つけ方・削除方法
⑲ データ名.iloc[行番号 : ]
どうやら、列「CustomerID」には、欠損値が存在するようです。
⑲を使って、「541536」以降の行を確認してみましょう。
インデックス「541536」以降の要
素でも、欠損値とそうでないものが
混在しているようです。


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GE5YZ8G5E4.jpg)

10
Section 9 欠損値の見つけ方・削除方法
⑳ データ名.isna().sum()
それでは、⑳を使って、「id_pos3」の欠損値の列ごとの個数を調べてみましょう。
どうやら、列「CustomerID」の他にも、列「Description」にも欠損値が存在するようです。


# Page. 11

![Page Image](https://bcdn.docswell.com/page/972GRKYG7R.jpg)

11
Section 9 欠損値の見つけ方・削除方法
㉑ データ名.dropna()
㉑を用いて、欠損値の無い新たなデータを作成しましょう。
「id_pos」は541909行でしたから、135,080行が削除されました。これは、「CustomerID」の
欠損値数と一致します。結構、欠損値の多いいわゆる「汚いデータ」ですね。


# Page. 12

![Page Image](https://bcdn.docswell.com/page/DJYVDNGGJM.jpg)

12
Section 9 欠損値の見つけ方・削除方法
⑳ データ名.isna().sum()
再び⑳を用いて、「id_pos4」の欠損値の列ごとの個数を調べてみましょう。
「id_pos4」の欠損値はなくなりました。「CustomerID」と「Description 」が同時に欠損値を
持っている行のみが存在していたことがわかります。


# Page. 13

![Page Image](https://bcdn.docswell.com/page/V7NM6XG8E8.jpg)

13
Section 9 欠損値の見つけ方・削除方法
⑳ データ名.isna().sum()
id_pos3 541,909行
CustomerIDに欠損値がある行
135,080行
id_pos4（欠損値の無い行）
541,909行 - 135,080行
=406,829行
Descriptionに欠損値がある行
1,454行
CustomerIDに欠損値がある行
and（⋂） Descriptionに欠損値がある行
1,454行


