Tengo el siguiente df en pandas.
0 ABC 1 2 NaN 8 ¿Cómo puedo comprobar si df.iloc[1]['B'] es NaN?
Intenté usar df.isnan() y obtengo una tabla como esta:
0 ABC 1 false true falsepero no estoy seguro de cómo indexar la tabla y si esta es una forma eficiente de realizar el trabajo.
La respuesta de Jezrael es perfecta. Si solo le preocupa el valor de NaN, estaba explorando para ver si hay una opción más rápida, ya que en mi experiencia, sumar matrices planas es (extrañamente) más rápido que contar. Este código parece más rápido:
df.isnull().values.any()Por ejemplo:
In [2]: df = pd.DataFrame(np.random.randn(1000,1000)) In [3]: df[df > 0.9] = pd.np.nan In [4]: %timeit df.isnull().any().any() 100 loops, best of 3: 14.7 ms per loop In [5]: %timeit df.isnull().values.sum() 100 loops, best of 3: 2.15 ms per loop In [6]: %timeit df.isnull().sum().sum() 100 loops, best of 3: 18 ms per loop In [7]: %timeit df.isnull().values.any() 1000 loops, best of 3: 948 µs per loopSi está buscando los índices de NaN en una columna específica, puede usar
list(df['B'].index[df['B'].apply(np.isnan)])En caso de que desee obtener los índices de todos los valores NaN posibles en el marco de datos, puede hacer lo siguiente
row_col_indexes = list(map(list, np.where(np.isnan(np.array(df))))) indexes = [] for i in zip(row_col_indexes[0], row_col_indexes[1]): indexes.append(list(i))Y si está buscando una sola línea, puede usar:
list(zip(*[x for x in list(map(list, np.where(np.isnan(np.array(df)))))]))