python - मैं पायथन में NaN की जांच कैसे कर सकता हूं?




math (8)

NaN के लिए परीक्षण करने का सामान्य तरीका यह देखना है कि यह स्वयं के बराबर है या नहीं:

def isNaN(num):
    return num != num

float('nan') में परिणाम (संख्या नहीं)। लेकिन मैं इसके लिए कैसे जांच करूं? बहुत आसान होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है।


एक और तरीका यदि आप <2.6 पर फंस गए हैं, तो आपके पास numpy नहीं है, और आपके पास आईईईई 754 समर्थन नहीं है:

def isNaN(x):
    return str(x) == str(1e400*0)

पायथन <2.6 के साथ समाप्त हुआ

def isNaN(x):
    return str(float(x)).lower() == 'nan'

यह मेरे लिए सोलारिस 5.9 बॉक्स पर पायथन 2.5.1 के साथ और उबंटू 10 पर पायथन 2.6.5 के साथ काम करता है


मुझे एक वेब-सेवा से डेटा प्राप्त हो रहा है जो NaN को स्ट्रिंग 'Nan' रूप में भेजता है। लेकिन मेरे डेटा में स्ट्रिंग के अन्य प्रकार भी हो सकते हैं, इसलिए एक साधारण float(value) अपवाद फेंक सकता है। मैंने स्वीकृत उत्तर के निम्नलिखित संस्करण का उपयोग किया:

def isnan(value):
  try:
      import math
      return math.isnan(float(value))
  except:
      return False

आवश्यकता:

isnan('hello') == False
isnan('NaN') == True
isnan(100) == False
isnan(float('nan')) = True

यह बताए जाने के सभी तरीके हैं कि चर NaN या कोई नहीं है:

कोई भी प्रकार नहीं

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 प्रकार

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

यहां एक उत्तर है जिसके साथ काम कर रहा है:

  • पायथन गैर अद्वितीय नाएन: float('nan')
  • numpy अद्वितीय NaN (सिंगलटन): np.nan
  • कोई अन्य ऑब्जेक्ट्स: स्ट्रिंग या जो कुछ भी (यदि सामना किया जाता है तो अपवाद नहीं उठाता है)

यह रहा:

import numpy as np

def is_nan(x):
    return (x is np.nan or x != x)

और कुछ उदाहरण:

values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
    print "{:<8} : {}".format(repr(value), is_nan(value))

आउटपुट:

nan      : True
nan      : True
55       : False
'string' : False
<function <lambda> at 0x000000000927BF28> : False

math.isnan()

या संख्या को स्वयं से तुलना करें। NaN हमेशा होता है! = NaN, अन्यथा (उदाहरण के लिए यदि यह एक संख्या है) तुलना सफल होना चाहिए।


numpy.isnan(number) आपको बताता है कि यह पाइथन 2.5 में NaN या नहीं।







math