2015-01-16 7 views
6

Bazı Matplotlib yöntemlerinin 'float days format' numaralı günlere ihtiyacı vardır. datestr2num bunun için bir dönüştürücü işlevi, ancak ilgili panda nesnelerle üzerine düşer:DatetimeIndex pandalarını "Float days format" a dönüştürme 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' 

Bu 'şamandıra gün biçimi' kez kullanılabilir bir listesini sağlar:

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

Ama orada olduğunu daha iyi yol?

+0

Bunun için hangi işlevi kullanmak istersiniz? Ve belki 'mpl.dates.date2num (df.index.to_pydatetime())' kullanabilirsiniz? – joris

+0

mpl.finance plotting işlevlerinden bazıları, "float days format" ı kullanmaktadır, ancak date2num, pandalar ile doğal olarak ilgilenemediği için utanç verici görünüyor. Ama öneriniz mükemmel çalışıyor! (Eğer bir cevapta koyarsanız ben işaretleyeceğim :) – birone

cevap

8

Sen DatetimeIndex ait to_pydatetime yöntemi (bu datetime.datetime 's bir dizi dönüştürmek olacak ve mpl.dates.date2num olanlar nasıl başa bilecek) kullanabilirsiniz:

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

date2num doğal değil sebebi Bir pandalar ele DatetimeIndex, matplotlib henüz numt datetime64 dtype (veri bir DatetimeIndex içinde saklanır nasıl) desteklemez çünkü.