6
votes

supprimer les jours bissextiles dans les pandas

J'ai un bloc de données dans les pandas comme celui-ci:

'Series' object has no attribute 'month'

Je veux supprimer tous les jours bissextiles et mon code est

df = df[~((df.Date.month == 2) & (df.Date.day == 29))]

mais l'erreur AttributeError s'est produite:

    ID          Date        Element Data_Value
0   USW00094889 2014-11-12  TMAX    22
1   USC00208972 2009-04-29  TMIN    56
2   USC00200032 2008-05-26  TMAX    278
3   USC00205563 2005-11-11  TMAX    139
4   USC00200230 2014-02-27  TMAX    -106

Quel est le problème avec mon code?


0 commentaires

3 Réponses :


5
votes

Utilisez l'accesseur dt :

df = df[~((df.Date.dt.month == 2) & (df.Date.dt.day == 29))]


0 commentaires

2
votes

Ajoutez l'accesseur dt car vous travaillez avec Series , pas avec DatetimeIndex:

df = df[df.Date.dt.strftime('%m-%m') != '02-29'] 

Ou inversez la condition avec chaînage | pour OU au niveau du bit et ! = pour différent de:

df = df[(df.Date.dt.month != 2) | (df.Date.dt.day != 29)]

Ou utilisez strftime pour convertir au format MM-JJ :

df = df[~((df.Date.dt.month == 2) & (df.Date.dt.day == 29))]


3 commentaires

Le premier est le mien :-)


@ U9-Forward - Oui, un problème?


Na ... pas de problème: D



2
votes

Une autre façon que vous pouvez essayer ci-dessous dans le cas où votre colonne Date n'est pas correcte datetime plutôt qu'une chaîne.

df[~df.Date.str.contains('02-29')]

OU, si il est au format datetime même si vous pouvez essayer de convertir en str.

df[~df.Date.astype(str).str.endswith('02-29')]

OU, même utiliser contient: p >

df[~df.Date.str.endswith('02-29')]


0 commentaires