Skip to content

En Python, tapez ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ ร  ๐งโ€Œ๐šโ€Œ๐งโ€Œ . ๐งโ€Œ๐šโ€Œ๐งโ€Œ signifie ยซ pas un nombre ยป et est dรฉfini par la norme ร  virgule flottante IEEE 754.

Dans l’exemple de code de cet article, math, pandas et NumPy sont importรฉs comme suit.

import math import numpy as np import pandas as pd 
source: nan_usage.py

Notez que N๐จโ€Œ๐งโ€Œ๐žโ€Œ , qui reprรฉsente l’absence d’une valeur, est diffรฉrent de ๐งโ€Œ๐šโ€Œ๐งโ€Œ . Pour plus d’informations sur N๐จโ€Œ๐งโ€Œ๐žโ€Œ , consultez l’article suivant.

Consultez les articles suivants sur la faรงon de supprimer et de remplacer ๐งโ€Œ๐šโ€Œ๐งโ€Œ dans NumPy et pandas.

๐งโ€Œ๐šโ€Œ๐งโ€Œ est une valeur ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ en Python

En Python, le type ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ inclut ๐งโ€Œ๐šโ€Œ๐งโ€Œ , qui peut รชtre crรฉรฉ ร  l’aide de ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ(‘๐งโ€Œ๐šโ€Œ๐งโ€Œ’) . D’autres mรฉthodes de crรฉation seront dรฉcrites plus tard.

print(float('nan')) # nan print(type(float('nan'))) # <class 'float'> 
source: nan_usage.py

Par exemple, lors de la lecture d’un fichier CSV avec des valeurs manquantes dans NumPy ou Pandas, ๐งโ€Œ๐šโ€Œ๐งโ€Œ est gรฉnรฉrรฉ pour reprรฉsenter ces valeurs. Dans Pandas, cela est notรฉ comme N๐šโ€ŒN , mais cela reprรฉsente รฉgalement la valeur manquante.

a = np.genfromtxt('data/src/sample_nan.csv', delimiter=',') print(a) # [[11. 12. nan 14.] # [21. nan nan 24.] # [31. 32. 33. 34.]] df = pd.read_csv('data/src/sample_pandas_normal_nan.csv')[:3] print(df) # name age state point other # 0 Alice 24.0 NY NaN NaN # 1 NaN NaN NaN NaN NaN # 2 Charlie NaN CA NaN NaN 
source: nan_usage.py

Crรฉer ๐งโ€Œ๐šโ€Œ๐งโ€Œ : ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ(‘๐งโ€Œ๐šโ€Œ๐งโ€Œ’) , ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐งโ€Œ๐šโ€Œ๐งโ€Œ , ๐งโ€Œ๐ฉโ€Œ.๐งโ€Œ๐šโ€Œ๐งโ€Œ

Comme dรฉcrit ci-dessus, vous pouvez crรฉer ๐งโ€Œ๐šโ€Œ๐งโ€Œ avec ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ(‘๐งโ€Œ๐šโ€Œ๐งโ€Œ’) . Il n’est pas sensible ร  la casse, vous pouvez donc utiliser ‘N๐šโ€ŒN’ et ‘NAN’ .

print(float('nan')) # nan print(float('NaN')) # nan print(float('NAN')) # nan 
source: nan_usage.py

De plus, ๐งโ€Œ๐šโ€Œ๐งโ€Œ est dรฉfini dans ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ (bibliothรจque standard) et NumPy ; N๐šโ€ŒN et NAN sont tous deux dรฉfinis comme des alias dans NumPy.

print(math.nan) # nan print(np.nan) # nan print(np.NaN) # nan print(np.NAN) # nan 
source: nan_usage.py

Ils sont รฉquivalents quelle que soit la mรฉthode utilisรฉe pour la crรฉation.

Vรฉrifiez si une valeur est ๐งโ€Œ๐šโ€Œ๐งโ€Œ : ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() , ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ()

Vous pouvez vรฉrifier si une valeur est ๐งโ€Œ๐šโ€Œ๐งโ€Œ ou non avec ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() .

print(math.isnan(float('nan'))) # True print(math.isnan(math.nan)) # True print(math.isnan(np.nan)) # True 
source: nan_usage.py

๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() est รฉgalement fourni.

En plus des valeurs scalaires, des objets de type tableau, tels que des listes et des tableaux NumPy ( ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ ), peuvent รฉgalement รชtre passรฉs comme arguments.

print(np.isnan(float('nan'))) # True print(np.isnan([float('nan'), math.nan, np.nan, 0])) # [ True True True False] 
source: nan_usage.py

๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ ont la mรฉthode ๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ() et son alias ๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐ฎโ€Œ๐ฅโ€Œ๐ฅโ€Œ() , qui renvoient T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ pour ๐งโ€Œ๐šโ€Œ๐งโ€Œ et N๐จโ€Œ๐งโ€Œ๐žโ€Œ .

Une erreur est gรฉnรฉrรฉe si N๐จโ€Œ๐งโ€Œ๐žโ€Œ est spรฉcifiรฉe pour ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() ou ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ () .

Comportement des opรฉrateurs de comparaison ( < , > , == , != ) avec ๐งโ€Œ๐šโ€Œ๐งโ€Œ

Lors de la comparaison avec ๐งโ€Œ๐šโ€Œ๐งโ€Œ , < , > , == , <= et >= renvoient toujours F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ et != renvoie toujours T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ .

print(10 < float('nan')) # False print(10 > float('nan')) # False print(10 == float('nan')) # False print(10 != float('nan')) # True 
source: nan_usage.py

Il en va de mรชme pour les comparaisons ๐งโ€Œ๐šโ€Œ๐งโ€Œ et ๐งโ€Œ๐šโ€Œ๐งโ€Œ . Notez que == et != donnent des rรฉsultats contre-intuitifs.

Toute comparaison ordonnรฉe d’un nombre avec une valeur qui n’est pas un nombre est fausse. Une implication contre-intuitive est que les valeurs qui ne sont pas un nombre ne sont pas รฉgales ร  elles-mรชmes. Par exemple, si x = float(‘NaN’), 3 < x, x < 3 et x == x sont tous faux, tandis que x != x est vrai. Ce comportement est conforme ร  la norme IEEE 754. 6. Expressions – Comparaisons de valeurs โ€” Documentation Python 3.11.3

print(float('nan') == float('nan')) # False print(float('nan') != float('nan')) # True 
source: nan_usage.py

Pour vรฉrifier si une valeur est ๐งโ€Œ๐šโ€Œ๐งโ€Œ , utilisez ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() au lieu de == .

Vรฉrifiez ๐งโ€Œ๐šโ€Œ๐งโ€Œ dans la dรฉclaration ๐ขโ€Œ๐Ÿโ€Œ

En Python, les objets autres que T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ et F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ sont รฉgalement รฉvaluรฉs comme vrais ou faux dans les conditions des instructions ๐ขโ€Œ๐Ÿโ€Œ . Par exemple, la chaรฎne vide ย ยป ou le nombre 0 est considรฉrรฉ comme faux, et les autres chaรฎnes ou nombres sont considรฉrรฉs comme vrais.

Comme vous pouvez le voir avec ๐›โ€Œ๐จโ€Œ๐จโ€Œ๐ฅโ€Œ() , ๐งโ€Œ๐šโ€Œ๐งโ€Œ est รฉvaluรฉ comme T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ .

print(bool(float('nan'))) # True 
source: nan_usage.py

Utilisez ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() ou ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() .

x = float('nan') if math.isnan(x): print('This is nan.') else: print('This is not nan.') # This is nan. 
source: nan_usage.py

x = 100 if math.isnan(x): print('This is nan.') else: print('This is not nan.') # This is not nan. 
source: nan_usage.py

Supprimer et remplacer ๐งโ€Œ๐šโ€Œ๐งโ€Œ dans une liste

Si vous souhaitez supprimer ou remplacer ๐งโ€Œ๐šโ€Œ๐งโ€Œ dans une liste, utilisez des comprรฉhensions de liste, des expressions conditionnelles (opรฉrateurs ternaires) et ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() , ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() .

l = [float('nan'), 0, 1, 2] print(l) # [nan, 0, 1, 2] print([x for x in l if not math.isnan(x)]) # [0, 1, 2] print([-100 if math.isnan(x) else x for x in l]) # [-100, 0, 1, 2] 
source: nan_usage.py

Utilisez simplement ๐ฆโ€Œ๐šโ€Œ๐ญโ€Œ๐กโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐ขโ€Œ๐ฌโ€Œ๐งโ€Œ๐šโ€Œ๐งโ€Œ() pour vรฉrifier, et le concept est le mรชme que dans les autres cas de suppression et de remplacement de valeurs. Voir l’article suivant pour plus de dรฉtails.

Consultez les articles suivants sur la faรงon de supprimer et de remplacer ๐งโ€Œ๐šโ€Œ๐งโ€Œ dans NumPy et pandas.

Opรฉrations avec ๐งโ€Œ๐šโ€Œ๐งโ€Œ

Les opรฉrations telles que + , , * , / et ** avec ๐งโ€Œ๐šโ€Œ๐งโ€Œ donnent ๐งโ€Œ๐šโ€Œ๐งโ€Œ .

print(float('nan') + 100) # nan print(float('nan') - 100) # nan print(float('nan') - 100) # nan print(float('nan') / 100) # nan print(float('nan') ** 100) # nan 
source: nan_usage.py