2016-06-15 37 views
5

Ho un dataframe nel panda della seguente modulo:panda dataframe resample al giorno senza indice temporale data

 timestamps   light 
7 2004-02-28 00:58:45 150.88 
26 2004-02-28 00:59:45 143.52 
34 2004-02-28 01:00:45 150.88 
42 2004-02-28 01:01:15 150.88 
59 2004-02-28 01:02:15 150.88 

Qui notare che l'indice non è la colonna timestamp. Ma voglio ricampionare (o binare i dati in qualche modo) per riflettere il valore medio della colonna di luce al minuto, ora, giorno, ecc. Ho esaminato il metodo resample che offre i panda e richiede che il dataframe abbia un indice datatime perché il metodo funzioni (a meno che non abbia frainteso questo).

  1. Quindi la mia prima domanda è, posso ri-indicizzare il dataframe avere timestamp come l'indice (notare che non ogni riga ha un timestamp unico e per ogni timestamp, ci sono circa 30 righe con lo stesso timestamp , ognuno rappresentante un sensore).

  2. In caso contrario, esiste un altro modo per ottenere eventualmente un altro dataframe che ha il valore medio di luce per ora, al giorno, al mese, ecc.?

Qualsiasi aiuto sarebbe apprezzato.

risposta

5

Hai ragione - necessità DatetimeIndex, TimedeltaIndex o PeriodIndex altro errore:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

quindi bisogna prima reset_index e set_index se originale index è importante:

print (df.reset_index().set_index('timestamps')) 
        index light 
timestamps       
2004-02-28 00:58:45  7 150.88 
2004-02-28 00:59:45  26 143.52 
2004-02-28 01:00:45  34 150.88 
2004-02-28 01:01:15  42 150.88 
2004-02-28 01:02:15  59 150.88 

se non solo set_index:

print (df.set_index('timestamps')) 
         light 
timestamps     
2004-02-28 00:58:45 150.88 
2004-02-28 00:59:45 143.52 
2004-02-28 01:00:45 150.88 
2004-02-28 01:01:15 150.88 
2004-02-28 01:02:15 150.88 

e poi resample:

print (df.reset_index().set_index('timestamps').resample('1D').mean()) 
      index light 
timestamps     
2004-02-28 33.6 149.408