2 votes

Sélectionnez les indices où la valeur np.nonzero() et ~np.isnan()

Je voudrais sélectionner uniquement les indices où la valeur est différente de 'Nan' et de 0

Créer un Dataframe

df = pd.DataFrame({'A':[np.nan,3,0,2],
                   'B':[0,1,1,2]})

df = np.asarray(df)

Malheureusement, le code ci-dessous ne fonctionne pas

df[np.nonzero(df) & ~np.isnan(df)]

Résultat attendu

array(3,1,1,2,2)

Est-ce que quelqu'un sait ce qui ne va pas avec ça?

1voto

jezrael Points 290608

Convertir les valeurs en un tableau 1D avec numpy.ravel puis, pour les valeurs différentes de 0, comparer avec != 0:

a = np.ravel(df.to_numpy())
a = a[(a != 0) & ~np.isnan(a)]
print(a)
[3. 1. 1. 2. 2.]

Comme mentionné par @sammywemmy, merci, ici np.ravel n'est pas nécessaire:

a = df.to_numpy()
a = a[(a != 0) & ~np.isnan(a)]
print(a)
[3. 1. 1. 2. 2.]

Vous ne pouvez pas comparer avec numpy.nonzero, car cela renvoie les indices au lieu du masque:

Renvoie les indices des éléments qui ne sont pas nuls.

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