【python】nanの判断方法
10184 ワード
pythonのnanは独自のタイプだと思っていたのですが、JS、C++ともにこのタイプがあり、怪しげに書かれたコードバグが少なすぎて遭遇しませんでした
Noneとnan
type(None)-----------Nonetype type(Nan)-------------float
判断nan
ここでは7つの判断方法を示したが、実際に有効なのは3つだけで、まだ半有効~後の4つの方法はnpのみである.nanは自分のタイプを判断することができて、その他の3種類は自分で自分を判断することができません.つまりnp.nan is np.nanはTrue float(‘nan’)is float(‘nan’)はFalseで、他の2つもFalseなのはなぜですか?Nan全称はNot a Numberであり、IEEE 754規格で規定されている二重精度浮動小数点数型の特殊値である.だからdのタイプを見て、np.nan、戻りもfloatタイプです.
4種類のfloat(‘nan’)npを試みた.float64(‘nan’) Decimal(‘nan’) np.nanは結果から、最初の2つの関数は100%正しいが、3つ目はfloatとnpであることが分かった.nanは効果があり、精度の高いDecimalには無効です.私もたまたまこの方法を見つけただけです.
Noneとnan
type(None)-----------Nonetype type(Nan)-------------float
判断nan
ここでは7つの判断方法を示したが、実際に有効なのは3つだけで、まだ半有効~後の4つの方法はnpのみである.nanは自分のタイプを判断することができて、その他の3種類は自分で自分を判断することができません.つまりnp.nan is np.nanはTrue float(‘nan’)is float(‘nan’)はFalseで、他の2つもFalseなのはなぜですか?Nan全称はNot a Numberであり、IEEE 754規格で規定されている二重精度浮動小数点数型の特殊値である.だからdのタイプを見て、np.nan、戻りもfloatタイプです.
import pandas as pd
import numpy as np
import math
from decimal import Decimal
''' , '''
''' Decimal '''
def isNan_1(a):
return math.isnan(a)
def isNan_2(a):
return a != a
def isNan_3(a):
if(str(a) == 'nan'):
return True
else:
return False
def isNan_4(a):
return a is float('nan')
def isNan_5(a):
return a is Decimal('nan')
def isNan_6(a):
return a is np.nan
def isNan_7(a):
return a is np.float64('nan')
4種類のfloat(‘nan’)npを試みた.float64(‘nan’) Decimal(‘nan’) np.nanは結果から、最初の2つの関数は100%正しいが、3つ目はfloatとnpであることが分かった.nanは効果があり、精度の高いDecimalには無効です.私もたまたまこの方法を見つけただけです.
a = float('nan')
type_str = "float('nan')"
print("%s type is \t \t \t \t %s
"%(type_str, type(a)))
print("math.isnan(%s) \t \t %s
"%(type_str, isNan_1(a)))
print("%s != %s \t \t %s
"%(type_str, type_str, isNan_2(a)))
print("%s == 'nan' \t \t \t %s
"%(type_str,isNan_3(a)))
print("%s is float('nan') \t \t %s
"%(type_str,isNan_4(a)))
print("%s is Decimal('nan') \t \t %s
"%(type_str,isNan_5(a)))
print("%s is np.nan \t \t \t %s
"%(type_str,isNan_6(a)))
print("%s is np.float64('nan') \t %s
"%(type_str,isNan_7(a)))
float('nan') type is
math.isnan(float('nan')) True
float('nan') != float('nan') True
float('nan') == 'nan' True
float('nan') is float('nan') False
float('nan') is Decimal('nan') False
float('nan') is np.nan False
float('nan') is np.float64('nan') False
np.float64('nan') type is
math.isnan(np.float64('nan')) True
np.float64('nan') != np.float64('nan') True
np.float64('nan') == 'nan' True
np.float64('nan') is float('nan') False
np.float64('nan') is Decimal('nan') False
np.float64('nan') is np.nan False
np.float64('nan') is np.float64('nan') False
Decimal('nan') type is
math.isnan(Decimal('nan')) True
Decimal('nan') != Decimal('nan') True
Decimal('nan') == 'nan' False
Decimal('nan') is float('nan') False
Decimal('nan') is Decimal('nan') False
Decimal('nan') is np.nan False
Decimal('nan') is np.float64('nan') False
np.nan type is
math.isnan(np.nan) True
np.nan != np.nan True
np.nan == 'nan' True
np.nan is float('nan') False
np.nan is Decimal('nan') False
np.nan is np.nan True
np.nan is np.float64('nan') False