Efficace de vérifier si l'objet arbitraire NaN en Python / numpy / pandas?
Mes tableaux numpy utilisation np.nan
pour désigner des valeurs manquantes. Comme je l'itération sur l'ensemble de données, j'ai besoin de détecter de telles valeurs manquantes et de les gérer d'une manière particulière.
Naïvement j'ai utilisé numpy.isnan(val)
, qui fonctionne bien, sauf val
n'est pas parmi le sous-ensemble de types pris en charge par numpy.isnan()
. Par exemple, les données manquantes peuvent se produire dans les champs de type chaîne, dans ce cas j'obtiens:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Autres que d'écrire un cher wrapper qui intercepte l'exception et retourne False
, il est un moyen de gérer cela d'une manière élégante et efficace?
pandas
apandas.isnull()
: je ne sais pas si cela répond à vos besoins, de sorte que certaines données de l'exemple peut-être bon.pandas.isnull()
semble fonctionner parfaitement. Le seul type de données, je suis en train de traiter avec qui romptnumpy.isnan()
est une chaîne, etpandas.isnull()
gère bien. En fait, il semble gérer le bien de tous n'importe quel objet je l'ai jeté à elle. Y avait-il des questions que vous avez été inquiété? Sinon, vous pouvez soumettre vos commentaires à part entière réponse, car il me semble que la réponse canonique, au moins pour les pandas utilisateurs.
Vous devez vous connecter pour publier un commentaire.
pandas.isnull()
(égalementpd.isna()
, dans les versions plus récentes) vérifie les valeurs manquantes dans les deux numérique et chaîne/tableaux d'objets. À partir de la documentation, il vérifie:Exemple rapide:
L'idée d'utiliser
numpy.nan
pour représenter les valeurs manquantes est quelque chose quepandas
introduit, qui est pourquoipandas
a les outils pour faire face avec elle.Datetimes trop (si vous utilisez
pd.NaT
vous n'aurez pas besoin de spécifier le dtype)Est votre type vraiment arbitraire? Si vous savez qu'il est juste va être un int, float ou une chaîne, vous pourriez faire
en supposant qu'il est enveloppé dans numpy , il aura toujours un dtype et seulement le flotteur et le complexe peut être NaN
dtype
. Vous pourriez avoir à fairetype(val) == 'float'
type(val) == float and np.isnan(val)
- a fonctionné pour moi