Skip to content

toona note

Pandas の bool型と boolean型の違い

はじめに

pandas のデータ型には、bool と boolean があります。
それぞれ、欠損値の扱いが異なりますので注意が必要です。 イメージとしては、

  • bool の欠損値は True。
  • boolean の欠損値は False。

です。 正確には本ポストのコードや公式を参照してください。 また、この仕様は予告なく変更される可能性があるようです。

サンプルコード

準備

1 行目が True
2 行目が False
3 行目が Nan

1 列目が bool
2 列目が boolean
の DataFrame を作ります。
DataFrame をコード中の output に示しました。

import numpy as np
import pandas as pd

df1 = pd.DataFrame([[True], [False], [np.nan]], dtype="bool")
df2 = pd.DataFrame([[True], [False], [np.nan]], dtype="boolean")

df = pd.concat([df1, df2], axis=1)
df.columns = ["bool_type_col", "boolean_type_col"]

print(df)

""" output
   bool_type_col  boolean_type_col
0           True              True
1          False             False
2           True              <NA>
"""

それぞれ dtype は bool, boolean に設定できています。

動作確認

先のコードに示したように、Nan は bool で定義すると True に置き換えられます。
確認のため、bool_type_col が True の行を抜き出します。

print(df[df["bool_type_col"]])

""" output
   bool_type_col  boolean_type_col
0           True              True
2           True              <NA>
"""

boolean type では Nan は <NA> となっていました。

boolean 型でも、 True の行を抜き出します。

print(df[df["boolean_type_col"]])

""" output
   bool_type_col  boolean_type_col
0           True              True
"""

このように、boolean では <NA> は True ではありません。
しかし、Nan は False でもありません。
boolean 型が False の行を抜き出します。

print(df[~df["boolean_type_col"]])

""" output
   bool_type_col  boolean_type_col
1          False             False
"""

このように boolean 型では Nan は <NA> という、True でも False でもない独自の値として解釈されます。

ちなみに...

numpy の欠損を bool にキャストすると True となります。

print(bool(np.nan) == True)
# output: True