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
'sisnan
también puede usardf['b'].isnull()
Respuestas:
Para DataFrame
df
:le devolverá el
MultiIndex
que puede usar para indexar de nuevodf
, por ejemplo:Para el índice entero:
fuente
ix
suena, por algunas razones parece que se ha desaprobado en favor deiloc
Aquí 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