NaN viene utilizzato come segnaposto per i dati mancanti in modo coerente nei panda , la coerenza è buona. Di solito leggo / traduco NaN come "mancante" . Vedi anche "lavorare con i dati mancanti" nei documenti.
Wes scrive nella documentazione "scelta della rappresentazione di NA" :
Dopo anni di produzione, l'uso di [NaN] si è dimostrato, almeno secondo me, la decisione migliore vista la situazione in NumPy e Python in generale. Il valore speciale NaN (Not-A-Number) viene utilizzato ovunque come valore NA e ci sono funzioni API isnull
e notnull
che possono essere utilizzate tra i dtypes per rilevare i valori NA.
...
Pertanto, ho scelto l'approccio pitonico "la praticità batte la purezza" e ho scambiato la capacità NA intera per un approccio molto più semplice di utilizzare un valore speciale in float e array di oggetti per denotare NA e promuovere gli array interi a fluttuanti quando i NA devono essere introdotto.
Nota: il "gotcha" che la serie intera contenente dati mancanti viene trasmessa in virgola mobile .
A mio parere, il motivo principale per utilizzare NaN (su None) è che può essere memorizzato con float64 dtype di numpy, piuttosto che con l'oggetto meno efficiente dtype, vedere promozioni di 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 commenta (sotto) su questo:
np.nan
consente operazioni vettorializzate; è un valore float, mentre None
, per definizione, forza il tipo di oggetto, che sostanzialmente disabilita tutta l'efficienza in numpy.
Quindi ripeti 3 volte velocemente: oggetto == cattivo, float == buono
Detto questo, molte operazioni potrebbero ancora funzionare altrettanto bene con None vs NaN (ma forse non sono supportate, ovvero a volte possono dare risultati sorprendenti ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
Per rispondere alla seconda domanda:
dovresti usare pd.isnull
e pd.notnull
per testare i dati mancanti (NaN).
qwerty
non è un numero.