2015-09-30 14 views
5

ho questa serie:Python .isnull() PANDAS non funziona su NAT oggetto DTYPE

ser=pd.Series([11,22,33,np.nan,np.datetime64('nat')],name='my_series') 

La serie si presenta così:

0  11 
1  22 
2  33 
3 NaN 
4 NaN 
Name: my_series, dtype: object 

ma ottengo solo un True per NULL valori:

ser.isnull() 

0 False 
1 False 
2 False 
3  True 
4 False 
Name: my_series, dtype: bool 

È un bug o come posso contare correttamente i valori NULL in una serie di panda? Questo non aiuta:

ser=ser.replace('NaN',np.nan) 

Grazie!

+0

State creando la serie, nel codice attuale così? –

+0

ha 'ser.loc [4]' risultato in 'NaN' o' NaT'? Penso che datetime64 possa trattare in modo intercambiabile con NaN e NaT, ma attribuire un NaT a una serie di "oggetto" causa il problema – vmg

+0

Sì. Ovviamente questo è solo un esempio ... Il secondo 'NaN' è stato convertito da' NaT' (??) ma ci possono essere alcuni problemi durante la conversione. O forse non c'è conversione: 'ser.loc [4]' risultati 'NaT' – ragesz

risposta

0

Per aggirare il problema, si può anche fare

series.apply(lambda x: str(x) == "nat")

Quindi è ancora possibile utilizzare np.datetime se si vuole

+2

Questo non funziona. 'series.apply (lambda x: str (x) ==" NaT ")' ** fa ** funziona. Attenzione alla distinzione tra maiuscole e minuscole nei confronti di stringhe. – C8H10N4O2

+0

^Questa è la risposta corretta – af3ld