NaN é usado como um espaço reservado para dados ausentes de forma consistente em pandas , a consistência é boa. Eu geralmente leio / traduzo NaN como "ausente" . Consulte também a seção 'trabalhando com dados ausentes' nos documentos.
Wes escreve nos documentos 'escolha da representação de NA' :
Após anos de produção, o uso [NaN] provou, pelo menos na minha opinião, ser a melhor decisão considerando o estado das coisas em NumPy e Python em geral. O valor especial NaN (Not-A-Number) é usado em todos os lugares como o valor NA, e há funções API isnull
e notnull
que podem ser usadas entre os dtypes para detectar valores NA.
...
Assim, eu escolhi a abordagem Pythônica "praticidade bate pureza" e negociei a capacidade de NA inteiros para uma abordagem muito mais simples de usar um valor especial em matrizes flutuantes e de objetos para denotar NA, e promover matrizes inteiras para flutuantes quando NAs devem ser introduzido.
Nota: o "pegadinho" de que Séries inteiras contendo dados ausentes são convertidas em flutuantes .
Na minha opinião, a principal razão para usar NaN (em vez de None) é que ele pode ser armazenado com o dtype float64 de numpy, em vez do dtype de objeto menos eficiente, consulte as promoções de tipo NA .
# without forcing dtype it changes None to NaN!
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Jeff comenta (abaixo) sobre isso:
np.nan
permite operações vetorizadas; é um valor flutuante, enquanto None
, por definição, força o tipo de objeto, o que basicamente desativa toda a eficiência em numpy.
Portanto, repita 3 vezes rápido: objeto == ruim, flutuante == bom
Dizendo isso, muitas operações ainda podem funcionar tão bem com None vs NaN (mas talvez não sejam suportadas, ou seja, às vezes podem dar resultados surpreendentes ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
Para responder à segunda pergunta:
Você deve estar usando pd.isnull
e pd.notnull
para testar se há dados ausentes (NaN).
qwerty
não é um número.