Quelle est la différence entre NaN et Aucun?
Je suis la lecture de deux colonnes d'un fichier csv à l'aide de pandas readcsv()
puis en attribuant les valeurs d'un dictionnaire. Les colonnes contiennent des chaînes de chiffres et de lettres. Il y a parfois des cas où une cellule est vide. À mon avis, la valeur de lire ce dictionnaire entrée doit être None
mais au lieu nan
est attribué. Sûrement None
est plus descriptive d'une cellule vide, car il a une valeur null, alors que nan
juste dit que la valeur lue n'est pas un nombre.
Est ma compréhension correcte, quelle EST la différence entre None
et nan
? Pourquoi est - nan
attribué au lieu de None
?
Aussi, mon dictionnaire de vérifier toutes les cellules vides a été à l'aide de numpy.isnan()
:
for k, v in my_dict.iteritems():
if np.isnan(v):
Mais cela me donne un message d'erreur indiquant que je ne peux pas utiliser cette case pour v
. Je suppose que c'est parce qu'un integer ou float variable, pas une chaîne de caractères est destiné à être utilisé. Si cela est vrai, comment puis-je vérifier v
pour une "cellule vide"/nan
cas?
- Le texte
qwerty
n'est pas un nombre. - Je sais, donc sûrement
None
serait une meilleure description de la valeur d'une cellule vide. - ma réponse est décrit que
Vous devez vous connecter pour publier un commentaire.
NaN est utilisé comme un espace réservé pour données manquantes constante dans les pandas, la cohérence est bonne. J'ai l'habitude de lire/traduire NaN comme "manquant". Également voir le "le travail avec des données manquantes' section dans les docs.
Wes écrit dans les docs le choix de la NA-représentation":
Remarque: le "je t'ai eu" que l'entier de la Série contenant les données manquantes sont sortie de flotte.
À mon avis la principale raison de l'utilisation de NaN (plus Rien), c'est qu'il peut être stocké avec numpy est float64 dtype, plutôt que le moins efficace de l'objet dtype, voir NA type de promotions.
Jeff commentaires (ci-dessous) sur ce:
Disant que, de nombreuses opérations peuvent continuer de fonctionner aussi bien avec Aucun vs NaN (mais peut-être ne sont pas pris en charge c'est à dire qu'ils peuvent parfois donner des résultats surprenants):
Pour répondre à la deuxième question:
Vous devriez être en utilisant
mp.isnull
etmp.notnull
pour tester l'effet des données manquantes (NaN).np.nan
permet vectorisé opérations; sa d'une valeur flottante, tandis queNone
, par définition, les forces deobject
type, et, fondamentalement, désactive toutes efficacité dans numpy, afin de répéter 3 fois rapide:object==bad, float==good
NaN
peut être utilisé comme une valeur numérique sur des opérations mathématiques, tandis queNone
ne peut pas (ou au moins ne devrait pas).NaN
est une valeur numérique, tel que défini dans La norme IEEE 754 norme à virgule flottante.None
est un Python interne de tipe (NoneType
) et serait plus comme "inexistant" ou "vide" que "numériquement non valide" dans ce contexte.Le "symptôme" de qui est que, si vous effectuez, disons, d'une moyenne ou d'une somme sur un tableau contenant NaN, même un seul, vous obtenez NaN... en
Dans l'autre main, vous ne pouvez pas effectuer des opérations mathématiques à l'aide de
None
comme opérande.Ainsi, selon le cas, vous pouvez utiliser
None
comme un moyen de dire à votre algorithme ne pas considérer invalide ou inexistant valeurs sur les calculs. Que signifierait l'algorithme de test de chaque valeur pour voir si c'estNone
.Numpy a certaines fonctions afin d'éviter des valeurs NaN contaminer vos résultats, tels que
nansum
etnan_to_num
par exemple.df=pd.readcsv('file.csv')
me donnerNaN
valeurs pour les cellules vides et pasNone
? Pour autant que je suis au courant, pd.DataFrames ne sont pas exclusifs pour les nombres.dtype
, de sorte que les valeurs non valides dedtype=float
doit être représenté par des valeurs numériques, quiNaN
est etNone
n'est pas (None
est deNoneType
).na
argument, qui vous permettent de décider de la valeur que vous allez utiliser pour remplacer non-valeurs disponiblesLa fonction
isnan()
vérifie pour voir si quelque chose est "Pas Un Nombre" et sera de retour si oui ou non une variable est un nombre, par exempleisnan(2)
serait return falseLe conditionnel
myVar is not None
retourne si oui ou non la variable est définieVotre tableau numpy utilise
isnan()
parce qu'il est destiné à être un tableau de nombres et il initialise tous les éléments de la matrice deNaN
ces éléments sont considérés comme "vides"isnan(2)
serait de retourFalse
, depuis le 2 n'est pas un NaN.numpy.empty
ne pas initialiser les valeurs deNaN
. Il n'a tout simplement pas initialiser les valeurs à tous.None
-ness estmyVar is not None
, pasmyVar != None
.np.isnan()
n'est pas mis en œuvre pour les variables de chaîne de caractères, donc si vous passez une chaîne de caractères qu'elle va se planter. Mieux utiliserpd.isnull
qui fonctionne avec des chaînes.NaN
stants pour PAS un nombre.None
peut être un obstacle pour tout.