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
2022 03 09