114 votes

Comment supprimer toutes les lignes d'un numpy.ndarray qui contiennent des valeurs non numériques ?

En gros, je fais de l'analyse de données. J'ai lu un ensemble de données sous forme de numpy.ndarray et certaines des valeurs sont manquantes (soit parce qu'elles n'existent pas, soit parce qu'elles ne sont pas disponibles). NaN ou en étant une chaîne de caractères écrite " NA ").

Je veux nettoyer toutes les lignes contenant une entrée comme celle-ci. Comment puis-je faire cela avec un tableau numpy ndarray ?

188voto

eumiro Points 56644
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

et le réaffecter à a .

Explication : np.isnan(a) retourne un tableau similaire avec TrueNaN , False ailleurs. .any(axis=1) réduit une m*n pour n avec une logique or sur l'ensemble des rangs, ~ inverse True/False y a[ ] choisit uniquement les lignes du tableau original, qui ont True entre les parenthèses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X