2015-09-30 5 views
5

Ich habe diese Serie:Python Pandas .isnull() funktioniert nicht auf NaT in Objekt dtype

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

Die Serie sieht wie folgt aus:

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

Aber ich bekomme nur ein True für NULL Werte:

ser.isnull() 

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

Ist es ein Fehler oder wie kann ich die NULL-Werte in einer Pandas-Reihe korrekt zählen? Das hilft nicht:

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

Danke!

+0

wollen, sind Sie die Serie zu schaffen, als auch in Ihrer aktuellen Code? –

+0

führt 'ser.loc [4]' zu 'NaN' oder' NaT'? Ich denke, dass datetime64 austauschbar mit NaN und NaT umgehen kann, aber das Zuweisen eines NaT zu einer Reihe von "Objekten" verursacht das Problem – vmg

+0

Ja. Natürlich ist dies nur ein Beispiel ... Die zweite 'NaN' wurde von' NaT' (??) konvertiert, aber es kann zu Problemen bei der Konvertierung kommen. Oder vielleicht gibt es keine Konvertierung: 'ser.loc [4]' Ergebnisse 'NaT' – ragesz

Antwort

0

Um dies zu umgehen, können Sie auch

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

Dann noch tun können, können Sie np.datetime verwenden, wenn Sie

+2

Dies funktioniert nicht. 'series.apply (Lambda x: str (x) ==" NaT ")' ** funktioniert **. Beachten Sie die Groß-/Kleinschreibung bei String-Vergleichen. – C8H10N4O2

+0

^Dies ist die richtige Antwort – af3ld