float('nan')
rezultate în Nan (not a number). Dar cum pot verifica asta? Ar trebui să fie foarte ușor, dar eu nu pot găsi.
Returna "True" dacă x este un NaN (not a number), și "Fals" în caz contrar.
>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
De fapt, am fugit în asta, dar pentru mine a fost de verificare pentru nan, -inf, sau inf. Am folosit
if float('-inf') < float(num) < float('inf'):
Acest lucru este valabil pentru numere false pentru nan și ambele inf, și va ridica o excepție pentru lucruri cum ar fi siruri de caractere sau alte tipuri (care este, probabil, un lucru bun). De asemenea, aceasta nu are nevoie de a importa orice biblioteci, cum ar fi matematica sau numpy (numpy este atât de mare încât se dubleaza dimensiunea de orice aplicație compilat).
aici este un răspuns de lucru cu:
float('nan')
Aici este:
import numpy as np
def is_nan(x):
return (x is np.nan or x != x)
Și câteva exemple:
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
print "{:<8} : {}".format(repr(value), is_nan(value))
Ieșire:
nan : True
nan : True
55 : False
'string' : False
<function <lambda> at 0x000000000927BF28> : False
import pandas as pd
import numpy as np
import math
#For single variable all three libraries return single boolean
x1 = float("nan")
print(f"It's pd.isna : {pd.isna(x1)}")
print(f"It's np.isnan : {np.isnan(x1)}")
print(f"It's math.isnan : {math.isnan(x1)}")
Ieșire `nimic L's pd.isna : Adevărat L's np.isnan : Adevărat L's de matematica.isnan : Adevărat ``
sau compara număr de la sine. NaN este întotdeauna != NaN, în caz contrar (de exemplu, dacă este un număr), comparația ar trebui să reușească.
Ei bine, am intrat în acest post, pentru că m-am'am avut unele probleme cu funcția:
math.isnan()
Există o problemă atunci când rula acest cod:
a = "hello"
math.isnan(a)
Se ridică o excepție. Soluția mea pentru că este de a face un alt control:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
Toate metodele pentru a spune dacă variabila este NaN sau Nici unul:
Nu este cazul tipul
In [1]: from numpy import math
In [2]: a = None
In [3]: not a
Out[3]: True
In [4]: len(a or ()) == 0
Out[4]: True
In [5]: a == None
Out[5]: True
In [6]: a is None
Out[6]: True
In [7]: a != a
Out[7]: False
In [9]: math.isnan(a)
Traceback (most recent call last):
File "<ipython-input-9-6d4d8c26d370>", line 1, in <module>
math.isnan(a)
TypeError: a float is required
In [10]: len(a) == 0
Traceback (most recent call last):
File "<ipython-input-10-65b72372873e>", line 1, in <module>
len(a) == 0
TypeError: object of type 'NoneType' has no len()
NaN tip
In [11]: b = float('nan')
In [12]: b
Out[12]: nan
In [13]: not b
Out[13]: False
In [14]: b != b
Out[14]: True
In [15]: math.isnan(b)
Out[15]: True
Am primit datele de la un serviciu web care trimite " NaN " ca un șir de caractere 'Nan'
. Dar ar putea fi și alte tipuri de coarde în mi datelor, precum și, deci, un simplu float(valoare)
ar putea arunca o excepție. Am folosit următoarea variantă a acceptat răspunsul:
def isnan(value):
try:
import math
return math.isnan(float(value))
except:
return False
Cerință:
isnan('hello') == False
isnan('NaN') == True
isnan(100) == False
isnan(float('nan')) = True
Dacă aveți tipuri mixte într-o iterable, aici este o soluție care nu utilizează numpy:
from math import isnan
Z = ['a','b', float('NaN'), 'd', float('1.1024')]
[x for x in Z if not (
type(x) == float # let's drop all float values…
and isnan(x) # … but only if they are nan
)]
['un', 'b', 'd', 1.1024]
Scurt-circuit de evaluare înseamnă că isnan
nu va fi numit pe valori care nu sunt de tip 'float', ca False și (...)
repede se evaluează la "False", fără a fi nevoie pentru a evalua partea dreaptă.
pentru siruri de caractere în panda ia pd.isnull:
if not pd.isnull(atext):
for word in nltk.word_tokenize(atext):
funcția caracteristică de extracție pentru NLTK
def act_features(atext):
features = {}
if not pd.isnull(atext):
for word in nltk.word_tokenize(atext):
if word not in default_stopwords:
features['cont({})'.format(word.lower())]=True
return features