CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: pandas で欠損値の有無を調べる

今回はかなり小ネタだけど pandas の DataFrame オブジェクト内に欠損値を含むカラムがあるか調べる方法について。

使った環境は次の通り。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.3
BuildVersion:   17D102
$ python -V
Python 3.6.4
$ pip list --format=columns | grep pandas
pandas          0.22.0 

ひとまず環境には pandas と numpy をインストールしておく。

$ pip install pandas numpy

サンプルとなる DataFrame を次のように用意する。 Python が標準で持っている None や pandas の NaT と numpy の NaN を織り交ぜてみた。 ちなみに NaT は "Not a Time" で、NaN は "Not a Number" を表している。

>>> import pandas as pd
>>> import numpy as np
>>> from datetime import date
>>> columns = ['id', 'name', 'gender', 'birth']
>>> data = [
...     (1, 'Alice', None, date(1980, 1, 1)),
...     (2, 'Bob', 'M', pd.NaT),
...     (np.NaN, None, None, date(1990, 2, 2)),
... ]
>>> df = pd.DataFrame(data, columns=columns)

上記で作った DataFrame は、次のような感じで欠損値が所々にある。

>>> df
    id   name gender       birth
0  1.0  Alice   None  1980-01-01
1  2.0    Bob      M         NaT
2  NaN   None   None  1990-02-02

その上で欠損値になっているところを調べるには DataFrame#isnull() メソッドを使うと良い。 上記のそれぞれの欠損値があるところが真偽値の True として表される。

>>> df.isnull()
      id   name  gender  birth
0  False  False    True  False
1  False  False   False   True
2   True   True    True  False

各カラムにどれだけ欠損値が含まれているかを確認するには DataFrame#sum() メソッドを使うと良い。

>>> df.isnull().sum()
id        1
name      1
gender    2
birth     1
dtype: int64

カラムに欠損値があることが分かったら、欠損している行について取り除くなり適切に穴埋めすることになる。

いじょう。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理