質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1507閲覧

pandas dataframeにおいてunique()メソッドで取得したnanのtype,bool値について

yohehe

総合スコア48

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/31 08:14

pandasのDataFrameのunique()メソッドで取得した欠損部nanについてですが、
bool値でnp.nan、pd.np.nanなどでbool値を取得しようとすると全てFalseになってしまいます。
typeメソッドではclass floatのnanとなっていると思うのですが、df.unique()で取得したnanに対してbool値でTrueにするにはどうしたらいいでしょうか。

初歩的な質問ですみませんが、調べてもわかりませんでした。
よろしくお願いいたします。

python

1import numpy as np 2import pandas as pd 3import math 4 5uniques_=df_train["columns[1]"].unique() 6print(uniques_) 7#出力:['TA' 'Fa' 'Gd' nan 'Ex' 'Po'] 8#uniques_で出力したnanはどういう扱いなのか。 9type(uniques_[3]) 10#nanはclass floatとして認識されている 11 12#以下のbool値は全部Falseになる 13print(uniques_[3]==pd.np.nan) 14print(uniques_[3]==np.nan) 15print(uniques_[3]==math.nan) 16print(uniques_[3]==None) 17#出力: 18#False 19#False 20#False 21#False 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

概要

NaN は NaN 自身との等号比較で False となるように仕様で定められているため、uniques_[3] はたしかに NaN だが、uniques_[3] == NaN の結果は False になる。

print(np.nan == np.nan) # False

NaN かどうかの判定は pandas.isnull で行う。

詳細

Pandas の NaN は浮動小数点型の NaN として表されています。
この浮動小数点数の仕様は IEEE754 という規格に従っており、その規格内で NaN は NaN 自身との等号比較は false となるように定められています。
NaN は Not a Number の略で0除算 (例: 1 / 0) や sqrt(-1) など数学的に定義されない演算を行った結果を表すために用意されている特殊な値です。
不正な結果に至った原因はいろいろ考えられますが、それらがイコールとすると、混乱を生むのでそのような仕様になっています。もしそうでないと、1 / 0 == sqrt(-1) が True になってしまいます。

投稿2019/05/31 08:29

編集2019/05/31 08:34
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohehe

2019/05/31 08:33

tittoi様ありがとうございます。 nanを等号で比較すること自体が間違っていたのですね。 いろいろ試してもFalseと出力されるのは適切だったのですね。勉強になりました。 pandasのisnull()メソッドでアクセスし直すようにします。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問