Tengo un DataFrame de pandas como este:
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 una forma eficiente de encontrar el índice "entero" de filas con NaN? En este caso, la salida deseada debería ser [3, 6].

df[np.isnan(df['b'])]numpy'sisnantambién puede usardf['b'].isnull()Respuestas:
Para DataFrame
df:le devolverá el
MultiIndexque puede usar para indexar de nuevodf, por ejemplo:Para el índice entero:
fuente
ixsuena, por algunas razones parece que se ha desaprobado en favor deilocAquí hay una solución más simple:
inds = pd.isnull(df).any(1).nonzero()[0]fuente
np.where(df['b'].notnull())[0].nonzero()[0]es mejor que[i for i, k in enumerate(mask) if k].)r, _ = np.where(df.isna()).to_numpy()para convertir en matriz numpy primero -pd.isnull(df).any(1).to_numpy().nonzero()Solución de una línea. Sin embargo, funciona solo para una columna.
fuente
list(...)como esta:list(df.loc[pandas.isna(df["b"]), :].index)Y por si acaso, si desea encontrar las coordenadas de 'nan' para todas las columnas (suponiendo que todas sean numéricas), aquí tiene:
fuente
No sé si es demasiado tarde, pero puede usar np.where para encontrar los índices de no valores como tales:
fuente
Aquí hay pruebas para algunos métodos:
Y sus correspondientes tiempos:
Parece que
pd.isnull(df['DRGWeight']).nonzero()[0]gana el día en términos de tiempo, pero cualquiera de los tres métodos principales tiene un rendimiento comparable.fuente
en el caso de que tenga un índice de fecha y hora y desee tener los valores:
fuente
Otra solución simple es
list(np.where(df['b'].isnull())[0])fuente
Aquí hay otra toma más simple:
fuente
Estaba buscando todos los índices de filas con valores NaN.
Mi solución de trabajo:
fuente
Deje que el marco de datos se llame df y la columna de interés (es decir, la columna en la que estamos tratando de encontrar nulos ) sea 'b' . Luego, el siguiente fragmento da el índice deseado de nulo en el marco de datos:
fuente