जवाबों:
वापसी
Trueअगर एक्स एक NaN (नहीं एक नंबर), और हैFalseअन्यथा।
>>> import math
>>> x = float('nan')
>>> math.isnan(x)
True
math.isnanकरने के लिए पसंद np.isnan()?
import numpyलगभग 15 एमबी की रैम import mathलेता है , जबकि कुछ 0,2 एमबी लेता है
numpy.isnanतो एक बेहतर विकल्प है, क्योंकि यह NumPy सरणियों को संभालता है। आप NumPy उपयोग नहीं कर रहे हैं, तो ऐसा NumPy निर्भरता ले रहे हैं और समय सिर्फ एक NaN जांच करने के लिए NumPy लोड करने के लिए खर्च (लेकिन आप कोड है कि NaN चेकों करता है की तरह लिख रहे हैं, यह है कोई लाभ होने की संभावना तुम हो जाना चाहिए का उपयोग किया NumPy)।
NaN के लिए परीक्षण करने का सामान्य तरीका यह देखना है कि क्या यह स्वयं के बराबर है:
def isNaN(num):
return num != num
numpy.isnan(number)आपको बताता है कि यह है NaNया नहीं।
numpy.all(numpy.isnan(data_list))यह भी उपयोगी है अगर आपको यह निर्धारित करने की आवश्यकता है कि सूची में सभी तत्व नैनो हैं
all(map(math.isnan, [float("nan")]*5))
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)}")
उत्पादन
It's pd.isna : True
It's np.isnan : True
It's math.isnan : True
ps.isna()मेरे मुद्दों को हल करती है। धन्यवाद!
यहाँ एक जवाब के साथ काम कर रहा है:
float('nan'), numpy.nan...मानक के बाद लागू किया गया एक NaN, एकमात्र मूल्य है जिसके लिए स्वयं के साथ असमानता की तुलना सही होनी चाहिए:
def is_nan(x):
return (x != x)
और कुछ उदाहरण:
import numpy as np
values = [float('nan'), np.nan, 55, "string", lambda x : x]
for value in values:
print(f"{repr(value):<8} : {is_nan(value)}")
आउटपुट:
nan : True
nan : True
55 : False
'string' : False
<function <lambda> at 0x000000000927BF28> : False
numpy.nanएक नियमित पायथन floatऑब्जेक्ट है, जिस तरह से लौटा है float('nan')। NumPy में आपके द्वारा सामना किए जाने वाले अधिकांश NaN numpy.nanवस्तु नहीं होंगे ।
numpy.nanसी में अंतर्निहित लाइब्रेरी में अपने स्वयं के NaN मान को परिभाषित करता है । यह अजगर के NaN को लपेटता नहीं है। लेकिन अब, वे दोनों IEEE 754 मानक का पालन करते हैं क्योंकि वे C99 API पर निर्भर हैं।
float('nan') is float('nan')(गैर अद्वितीय) और np.nan is np.nan(अद्वितीय)
np.nanएक विशिष्ट वस्तु है, जबकि प्रत्येक float('nan')कॉल एक नई वस्तु का उत्पादन करता है। अगर आपने किया nan = float('nan'), तो आपको nan is nanभी मिलेगा । यदि आपने वास्तविक NumPy NaN जैसा कुछ बनाया है np.float64('nan'), तो आपको np.float64('nan') is not np.float64('nan')भी मिलेगा ।
मैं वास्तव में बस इस में भाग गया, लेकिन मेरे लिए यह नैनो, -inf या inf के लिए जाँच कर रहा था। मैंने अभी उपयोग किया है
if float('-inf') < float(num) < float('inf'):
यह संख्याओं के लिए सही है, नैन और दोनों के लिए गलत है, और स्ट्रिंग्स या अन्य प्रकार (जो शायद एक अच्छी बात है) जैसी चीजों के लिए एक अपवाद बढ़ाएगा। इसके अलावा यह गणित या सुन्न की तरह किसी भी पुस्तकालयों के आयात की आवश्यकता नहीं है (सुन्न इतना बड़ा है यह किसी भी बाध्यकारी अनुप्रयोग के आकार को दोगुना कर देता है)।
math.isfiniteपायथन 3.2 तक पेश नहीं किया गया था, इसलिए 2012 में @DaveTheScientist से जवाब दिया गया था कि यह बिल्कुल "पहिये को सुदृढ़ करना" नहीं था - समाधान अभी भी पायथन 2 के साथ काम करने वालों के लिए है
या संख्या की खुद से तुलना करें। NaN हमेशा होता है! = NaN, अन्यथा (जैसे अगर यह है एक नंबर) तुलना सफल होने चाहिए।
वैसे मैंने इस पोस्ट में प्रवेश किया है, क्योंकि मेरे पास फ़ंक्शन के साथ कुछ समस्याएँ हैं:
math.isnan()
जब आप यह कोड चलाते हैं तो समस्याएँ होती हैं:
a = "hello"
math.isnan(a)
यह अपवाद को जन्म देता है। इसके लिए मेरा समाधान एक और जाँच करना है:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
def is_nan(x): try: return math.isnan(x) except: return False
अजगर <2.6 के साथ मैं समाप्त हो गया
def isNaN(x):
return str(float(x)).lower() == 'nan'
यह मेरे लिए एक सोलारिस 5.9 बॉक्स पर अजगर 2.5.1 और Ubuntu 10 पर अजगर 2.6.5 के साथ काम करता है
-1.#IND
मैं एक वेब-सेवा से डेटा प्राप्त कर रहा हूं जो 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
try: int(value)
valueहोने NaNया न होने के बारे में बताता है ?
NaNहै (जैसे अजगर से जो आपको मिल सकता है float('inf') * 0), और इस प्रकार हालांकि स्ट्रिंग 'हैलो' एक संख्या नहीं है, लेकिन यह भी है NaNक्योंकि NaNअभी भी एक संख्यात्मक मूल्य नहीं है!
int(value)सभी अपवाद के लिए, Falseलिखा जाएगा।
यह बताने के सभी तरीके कि क्या चर 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
यदि आपके पास एक चलने योग्य में मिश्रित प्रकार हैं, तो यहां एक समाधान है जो कि खसखस का उपयोग नहीं करता है:
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
)]
['ए', 'बी', 'डी', १.१०२४]
शॉर्ट-सर्किट मूल्यांकन का मतलब है कि isnanउन मूल्यों पर नहीं कहा जाएगा जो टाइप 'फ्लोट' के नहीं हैं, जैसा कि राइट-हैंड साइड का मूल्यांकन किए बिना False and (…)जल्दी Falseसे मूल्यांकन करता है।
पायथन में 3.6 एक स्ट्रिंग मान x math.isnan (x) और np.isnan (x) पर एक त्रुटि उठाता है। इसलिए मैं जांच नहीं कर सकता कि दिया गया मूल्य NaN है या नहीं अगर मुझे पहले से पता नहीं है कि यह एक नंबर है। निम्नलिखित इस समस्या को हल करने के लिए लगता है
if str(x)=='nan' and type(x)!='str':
print ('NaN')
else:
print ('non NaN')
पांडा में तार के लिए pd.isnull लें:
if not pd.isnull(atext):
for word in nltk.word_tokenize(atext):
एनएलटीके के लिए सुविधा निष्कर्षण के रूप में कार्य
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