2015-01-16 12 views
6

Alcuni metodi Matplotlib richiedono giorni in 'float days format'. datestr2num è una funzione convertitore per questo, ma cade sopra con gli oggetti panda rilevanti:Conversione dei panda DatetimeIndex in "formato giorno mobile" con Matplotlib.dates.datestr2num

In [3]: type(df.index) 
Out[3]: pandas.tseries.index.DatetimeIndex 
In [4]: type(df.index[0]) 
Out[4]: pandas.tslib.Timestamp 
In [5]: mpl.dates.date2num(df.index) 
Out [5]: ... 
AttributeError: 'numpy.datetime64' object has no attribute 'toordinal' 

Questo fornisce un elenco utile di volte in 'formato giorni float':

dates = [mpl.dates.date2num(t) for t in df.index] 

Ma c'è un modo migliore?

+0

Quale funzione si desidera utilizzare che richiede questo? E forse puoi usare 'mpl.dates.date2num (df.index.to_pydatetime())'? – joris

+0

Alcune delle funzioni di plottaggio di mpl.finance utilizzano il "formato float days" anche se sembra una vergogna date2num non può trattare nativamente con DatetimeIndice di panda. Ma il tuo suggerimento funziona perfettamente grazie! (Se lo metti in una risposta, lo segnalo :) – birone

risposta

8

È possibile utilizzare il metodo to_pydatetime del DatetimeIndex (questo verrà convertito in una serie di datetime.datetime 's, e mpl.dates.date2num saprà come gestire quelle):

mpl.dates.date2num(df.index.to_pydatetime()) 

La ragione per cui date2num non lo fa in modo nativo gestire un DatetimeIndex panda, è perché matplotlib non supporta ancora il dtype datetime64 numpy (che è il modo in cui i dati sono memorizzati in un DatetimeIndex).

Problemi correlati