Eu tenho um DataFrame do 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 uma maneira eficiente de encontrar o índice "inteiro" de linhas com NaNs? Nesse caso, a saída desejada deve ser [3, 6]
.
df[np.isnan(df['b'])]
numpy
,isnan
você também pode usardf['b'].isnull()
Respostas:
Para DataFrame
df
:devolverá o
MultiIndex
que você pode usar para indexar de voltadf
, por exemplo:Para o índice inteiro:
fonte
ix
pareça, por alguns motivos parece que foi substituído poriloc
Aqui está uma solução mais simples:
inds = pd.isnull(df).any(1).nonzero()[0]
fonte
np.where(df['b'].notnull())[0]
.nonzero()[0]
é melhor do que[i for i, k in enumerate(mask) if k]
.)r, _ = np.where(df.isna())
.to_numpy()
para converter primeiro em matriz numpy -pd.isnull(df).any(1).to_numpy().nonzero()
Solução de uma linha. No entanto, funciona apenas para uma coluna.
fonte
list(...)
assim:list(df.loc[pandas.isna(df["b"]), :].index)
E por via das dúvidas, se você quiser encontrar as coordenadas de 'nan' para todas as colunas (supondo que sejam todas numéricas), aqui está:
fonte
Não sei se é tarde demais, mas você pode usar np.where para encontrar os índices de valores não como tais:
fonte
Aqui estão os testes para alguns métodos:
E seus tempos correspondentes:
Parece que
pd.isnull(df['DRGWeight']).nonzero()[0]
vence o dia em termos de tempo, mas qualquer um dos três métodos principais tem desempenho comparável.fonte
no caso de você ter índice datetime e desejar ter os valores:
fonte
Outra solução simples é
list(np.where(df['b'].isnull())[0])
fonte
Aqui está outra tomada mais simples:
fonte
Eu estava procurando todos os índices de linhas com valores NaN.
Minha solução de trabalho:
fonte
Deixe o dataframe ser denominado df e a coluna de interesse (ou seja, a coluna na qual estamos tentando encontrar nulos ) seja 'b' . Em seguida, o seguinte snippet fornece o índice desejado de nulo no dataframe:
fonte