J'ai un DataFrame pandas comme celui-ci:
a b
2011-01-01 00:00:00 1.883381 -0.416629
2011-01-01 01:00:00 0.149948 -1.782170
2011-01-01 02:00:00 -0.407604 0.314168
2011-01-01 03:00:00 1.452354 NaN
2011-01-01 04:00:00 -1.224869 -0.947457
2011-01-01 05:00:00 0.498326 0.070416
2011-01-01 06:00:00 0.401665 NaN
2011-01-01 07:00:00 -0.019766 0.533641
2011-01-01 08:00:00 -1.101303 -1.408561
2011-01-01 09:00:00 1.671795 -0.764629
Existe-t-il un moyen efficace de trouver l'index "entier" des lignes avec NaN? Dans ce cas, la sortie souhaitée doit être [3, 6]
.
df[np.isnan(df['b'])]
numpy
s,isnan
vous pouvez également utiliserdf['b'].isnull()
Réponses:
Pour DataFrame
df
:vous rendra le
MultiIndex
que vous pouvez utiliser pour indexerdf
, par exemple:Pour l'index entier:
la source
ix
paraître, pour certaines raisons, il semble qu'il ait été déconseillé en faveur deiloc
Voici une solution plus simple:
inds = pd.isnull(df).any(1).nonzero()[0]
la source
np.where(df['b'].notnull())[0]
.nonzero()[0]
c'est mieux que[i for i, k in enumerate(mask) if k]
.)r, _ = np.where(df.isna())
.to_numpy()
pour convertir dans le tableau numpy -pd.isnull(df).any(1).to_numpy().nonzero()
Solution en une seule ligne. Cependant, cela fonctionne pour une seule colonne.
la source
list(...)
comme ceci:list(df.loc[pandas.isna(df["b"]), :].index)
Et juste au cas où, si vous voulez trouver les coordonnées de `` nan '' pour toutes les colonnes à la place (en supposant qu'elles soient toutes numériques), allez-y:
la source
Je ne sais pas si c'est trop tard mais vous pouvez utiliser np.where pour trouver les indices des non valeurs en tant que telles:
la source
Voici des tests pour quelques méthodes:
Et leurs horaires correspondants:
Il semblerait que cela
pd.isnull(df['DRGWeight']).nonzero()[0]
gagne la journée en termes de timing, mais que l'une des trois meilleures méthodes a des performances comparables.la source
dans le cas où vous avez un index datetime et que vous souhaitez avoir les valeurs:
la source
Une autre solution simple est
list(np.where(df['b'].isnull())[0])
la source
Voici une autre prise plus simple:
la source
Je cherchais tous les index de lignes avec des valeurs NaN.
Ma solution de travail:
la source
Soit le dataframe nommé df et la colonne d'intérêt (c'est-à - dire la colonne dans laquelle nous essayons de trouver des valeurs nulles ) est «b» . Ensuite, l'extrait de code suivant donne l'index souhaité de null dans le dataframe:
la source