Le filtrage de toutes les lignes avec le NaT dans une colonne dans Dataframe python
J'ai un df comme ceci:
a b c
1 NaT w
2 2014-02-01 g
3 NaT x
df=df[df.b=='2014-02-01']
va me donner
a b c
2 2014-02-01 g
Je veux une base de données de toutes les lignes avec le NaT dans la colonne b?
df=df[df.b==None] #Doesn't work
Ce que je veux c':
a b c
1 NaT w
3 NaT x
umm, df[df.b == pd.NaT]?
pd.NaT != pd.NaT
, bien que, comme nan != nan
.OriginalL'auteur Jase Villam | 2014-05-19
Vous devez vous connecter pour publier un commentaire.
isnull
etnotnull
travailler avecNaT
de sorte que vous pouvez les gérer de la même manière que la poignéeNaNs
:suffit d'utiliser
isnull
pour sélectionner:OriginalL'auteur Karl D.
Pour ceux qui sont intéressés, dans mon cas, j'ai voulu faire tomber le NaT contenues dans le DateTimeIndex d'un dataframe. Je ne pouvais pas utiliser directement les notnull construction comme suggéré par Karl D. Vous devez d'abord créer un temporaire de la colonne de l'index, puis appliquer le masque, puis supprimer de manière temporaire colonne de nouveau.
OriginalL'auteur Eelco van Vliet
À l'aide de votre exemple dataframe:
Jusqu'à v0.17 ce n'étais pas de travail:
et il y avait à faire:
Depuis v0.17 cependant, les deux méthodes fonctionnent, bien que je ne recommande que la première.
OriginalL'auteur Radu
J'ai l'impression que le commentaire de @DSM vaut une réponse sur son propre, parce que cela répond à la question fondamentale.
Le malentendu provient de l'hypothèse que
pd.NaT
agit commeNone
. Cependant, alors queNone == None
retourneTrue
,pd.NaT == pd.NaT
retourneFalse
. Les PandasNaT
se comporte comme un virgule flottanteNaN
, qui n'est pas égal à lui-même.Comme la réponse précédente expliquer, vous devez utiliser
OriginalL'auteur Michael Dorner