2015-01-16 9 views
6

Niektóre metody Matplotlib wymagają dni w 'float days format'. datestr2num jest funkcją konwerter do tego, ale przewraca się z odpowiednimi obiektami pandy:Konwersja pand DatetimeIndex na format dni float z 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' 

To zapewnia użyteczną listę razy w „formacie dni pływak”:

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

Ale czy istnieje lepszy sposób?

+0

Jaką funkcję chcesz użyć, która tego wymaga? A może możesz użyć 'mpl.dates.date2num (df.index.to_pydatetime())'? – joris

+0

Niektóre funkcje kreślenia mpl.finance używają formatu dni float, chociaż wydaje się, że date2num nie jest w stanie poradzić sobie z pandami DatetimeIndices. Ale Twoja sugestia działa doskonale dzięki! (Jeśli umieścisz to w odpowiedzi, zaznaczę to :) – birone

Odpowiedz

8

Można użyć metody to_pydatetime z DatetimeIndex (będzie przekonwertować go na tablicy datetime.datetime „s, a mpl.dates.date2num będzie wiedział jak obsługiwać te):

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

Powodem że date2num nie natywnie obsługuje pandas DatetimeIndex, ponieważ matplotlib nie obsługuje jeszcze numpy datetime64 dtype (w ten sposób dane są przechowywane w DatetimeIndex).

Powiązane problemy