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?
3 Réponses :
Utilisez l'accesseur dt
:
df = df[~((df.Date.dt.month == 2) & (df.Date.dt.day == 29))]
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))]
Le premier est le mien :-)
@ U9-Forward - Oui, un problème?
Na ... pas de problème: D
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')]