Mes tableaux numpy utilisent np.nan
pour désigner les valeurs manquantes. En parcourant l'ensemble de données, je dois détecter ces valeurs manquantes et les gérer de manière spéciale.
J'ai utilisé naïvement numpy.isnan(val)
, ce qui fonctionne bien sauf s'il val
ne fait pas partie du sous-ensemble de types pris en charge par numpy.isnan()
. Par exemple, des données manquantes peuvent se produire dans des champs de chaîne, auquel cas j'obtiens:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Outre l'écriture d'un wrapper coûteux qui détecte l'exception et renvoie False
, existe-t-il un moyen de gérer cela de manière élégante et efficace?
pandas
haspandas.isnull()
: Je ne sais pas si cela répond à vos besoins, donc quelques exemples de données pourraient être utiles.pandas.isnull()
semble fonctionner parfaitement. Le seul type de données auquel je suis actuellement confronténumpy.isnan()
est une chaîne et lapandas.isnull()
gère bien. En fait, il semble bien gérer tous les objets arbitraires que je lui ai lancés. Y avait-il des problèmes spécifiques qui vous préoccupaient? Sinon, vous voudrez peut-être soumettre votre commentaire en tant que réponse à part entière, car cela semble être la réponse canonique, du moins pour les utilisateurs de pandas.Réponses:
pandas.isnull()
(égalementpd.isna()
, dans les versions plus récentes) vérifie les valeurs manquantes dans les tableaux numériques et chaînes / 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 qui apandas
introduit, c'est pourquoi ilpandas
a les outils pour y faire face.Datetimes aussi (si vous utilisez,
pd.NaT
vous n'aurez pas besoin de spécifier le dtype)la source
Votre type est-il vraiment arbitraire? Si vous savez que ce sera juste un flotteur int ou une chaîne, vous pouvez simplement le faire
en supposant qu'il est enveloppé dans numpy, il aura toujours un dtype et seuls float et complex peuvent être NaN
la source
dtype
. Vous pourriez avoir à fairetype(val) == 'float'
type(val) == float and np.isnan(val)
- a travaillé pour moi