2016-01-23 4 views
6

Ho il foll. dataframe:Rimuovi anno bisestile da dataframe panda

datetime 
2012-01-01 125.5010 
2012-01-02 125.5010 
2012-01-03 125.5010 
2012-02-04 125.5010 
2012-02-05 125.5010 
2012-02-29 125.5010 
2012-02-28 125.5010 
2016-01-07 125.5010 
2016-01-08 125.5010 
2016-02-29  81.6237 

Vorrei eliminare tutte le righe corrispondenti al 29 febbraio, con conseguente foll. frame di dati:

datetime 
2012-01-01 125.5010 
2012-01-02 125.5010 
2012-01-03 125.5010 
2012-02-04 125.5010 
2012-02-05 125.5010 
2012-02-28 125.5010 
2016-01-07 125.5010 
2016-01-08 125.5010 

In questo momento, sto solo facendo manualmente:

df.drop(df.index[['2012-02-29']]). Come posso fare in modo che funzioni per tutti gli anni, senza dover specificare manualmente l'indice delle righe.

+1

Questo è molto simile a questa domanda: http://stackoverflow.com/questions/30997007/pandas-dataframe-delete-specific-date-in-all-leap-years – EdChum

risposta

4

IIUC si può mascherare e rimuovere dal loc:

def is_leap_and_29Feb(s): 
    return (s.index.year % 4 == 0) & 
      ((s.index.year % 100 != 0) | (s.index.year % 400 == 0)) & 
      (s.index.month == 2) & (s.index.day == 29) 

mask = is_leap_and_29Feb(df) 
print mask 
#[False False False False False True False False False True] 

print df.loc[~mask] 
#   datetime 
#2012-01-01 125.501 
#2012-01-02 125.501 
#2012-01-03 125.501 
#2012-02-04 125.501 
#2012-02-05 125.501 
#2012-02-28 125.501 
#2016-01-07 125.501 
#2016-01-08 125.501 
+0

Peccato che tu abbia modificato la tua risposta originale, avesse un'applicabilità più generale. –

+0

Nessun problema, il rollback è super. Grazie. – jezrael

10

Se il dataframe ha già la colonna datetime come indice è possibile:

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

questo dovrebbe rimuovere le righe contenenti il ​​giorno di febbraio 29 per tutti gli anni.

4

È possibile visualizzare la data come string e vedere se finisce con 02-29:

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

Utilizzando questo metodo, è possibile utilizzare qualsiasi metodo di stringa-comparism come contains, ecc