2017-09-20 2 views
0

Je dois retourner le nombre de valeurs non raisonnables (nan ou hors plage) pour la 3ème colonne où il y a un blanc. Je dois traiter un fichier csv dans un vrai problème mais je viens de créer un ndarray pour le moment.comment retourner le nombre de certaines valeurs dans un tableau en utilisant numpy

data = np.array([[ 1, 2000, 143, 4546], [ 2, 1999, 246, 0], [ 3, 2008, 190, ], [ 4, 2000, 100, 0]]) 

Je ne peux même pas penser où je devrais commencer.

Ce sera génial si quelqu'un peut vous aider.

+1

Pouvez-vous être plus précis sur ce dont vous avez besoin? Quelle est la sortie que vous voulez par exemple? – Psidom

+0

c'est ce que j'essaie de comprendre aussi ... c'est comme ça que la question a été formulée. Donc je suppose que je dois juste retourner combien de cellules dans le fichier csv est vide, nan ou 0. –

+0

devrait être 'data = np.array ([[1, 2000, 143, 4546], [2, 1999, 246 , 0], [3, 2008, 190, np.NAN], [4, 2000, 100, 0]]) – RagingRoosevelt

Répondre

1

Tout d'abord, vous devez être en mesure d'accéder simplement la colonne que vous êtes intéressé à faire avec une tranche.

data[:,2] # grab all rows, and just the column with index 2 

Maintenant, vous voulez compter les occurrences qui sont NaN:

np.count_nonzero(np.isnan(data[:,2])) 

Et nous voulons compter le nombre de zéro éléments:

data[:,2].size - np.count_nonzero(data[:,2]) 

Et si l'on ajoute les ensemble:

data[:,2].size - np.count_nonzero(data[:,2]) + np.count_nonzero(np.isnan(data[:,2])) 

Ceci est ennuyeux, mais, puisque la 3ème colonne n'a pas 0 ou NaN en elle. Lets essayer avec la dernière colonne:

>>> slice = data[:,3] 
>>> slice.size - np.count_nonzero(slice) + np.count_nonzero(np.isnan(slice)) 
3 

modifier Je dois expliquer pourquoi cela fonctionne:

np.isnan(data[:,2]) donne un tableau de True et False sur la base si elle est un NaN ou non. True, lorsqu'il est considéré comme un nombre, est converti en 1 et np.count_nonzero valeurs NaN`.

np.count_nonzero(data[:,2]) compte le nombre de non-zéro directement. Si nous soustrayons le nombre d'éléments non-zéro du nombre total d'éléments, nous obtiendrons le nombre 0 s.

+0

hey merci beaucoup. J'ai essayé ce code sur mes vraies données de csv. et j'ai testé sur la colonne plusieurs qui a 0 dans le. mais je reçois un compte de plus que le nombre réel. Donc, s'il y a 54 0 dans une colonne, alors je reçois 55 en quelque sorte. –

+0

Essayez d'exécuter les trois parties par elles-mêmes pour voir lequel donne le mauvais numéro. Donc 'slice.size', puis' np.count_nonzero (tranche) 'puis' np.count_nonzero (np.isnan (tranche)) '. – RagingRoosevelt