2012-12-12 59 views
1

我讀入一個文件並用熊貓DataFrame繪製它。索引是DatetimeIndex,然後我使用ginput(1)方法得到一個點,但是我得到的座標是錯誤的。Ginput給datetimeindex輸入錯誤的日期

的代碼如下:

import pandas as pd 
from matplotlib.dates import num2date, date2num 
ts = pd.date_range('2012-04-12,16:13:09', '2012-04-14,00:13:09', freq='H') 
df = pd.DataFrame(index=ts) 
df[0] = 20.6 

我然後情節和使用ginput在圖表上點擊:

df.plot() 
t = pylab.ginput(n=1) #click somewhere near 13-APR-2012 

然而,第一項似乎是一個浮子

In [8]: x = t[0][0] # ~ 370631.67741935479 

In [9]: num2date(x) 
Out[9]: datetime.datetime(1015, 10, 3, 16, 15, 29, 32253, tzinfo=<matplotlib.dates._UTC object at 0x104196550>) 
# this is way out! 

該文件表明它應該使用這些浮標(來自datetonum):

In [10]: dt = pd.to_datetime('13-4-2012', dayfirst=True) 

In [11]: date2num(dt) 
Out[11]: 734606.0 

這是什麼浮點數,以及如何將它轉換爲日期時間?

注:如果我從數據框中刪除行的一個這種正常工作:

df1 = df.drop(ts[1], axis=0) 
... 
+0

我在[github](https: //github.com/pydata/pandas/issues/2503)。 –

+0

非常感謝你的幫助。你的編輯是完美的:) – wuwucat

回答

1

對於規則的頻率索引的數據,熊貓標的指數轉換爲PeriodIndex使決議放大和縮小時x-tick標籤會自動更新。所以你得到的序號是週期序號。

爲了將其轉換回日期時間,你可以做到以下幾點:

In [36]: pd.Period(ordinal=int(t[0][0]), freq='H') 
Out[36]: Period('2012-04-12 18:00', 'H') 

In [37]: pd.Period(ordinal=int(t[0][0]), freq='H').to_timestamp() 
Out[37]: <Timestamp: 2012-04-12 18:00:00> 

*時間是保持納秒

話雖這麼說,理想情況下,我們會隱藏轉換日期時間的子類(或者根本沒有必要做轉換!),只要我有足夠的時間來重構所有的繪圖代碼...

+0

非常感謝你,我通過使用matplotlib而不是熊貓來繪製圖形來解決問題。然後ginput()正常工作。 – wuwucat

相關問題