2013-10-12 76 views
2

我正在加載數據文件,提取某些列,並使用matplotlib將它們繪製爲PDF。Python - 使用pandas和matplotlib繪製日期時間索引的問題

當我加載我的數據文件到熊貓,我得到一個DateTimeIndex。如果我以這種形式繪製數據,一切順利。當我選擇基於時間的數據,即一個子集

的問題出現了:

data = data.ix[data.index >= start_time] 
data = data.ix[data.index <= end_time] 

現在,當我去繪製數據,熊貓似乎已經改變的東西,因爲DateTimeIndex是一個數組的npdatetime64類型,這顯然不受matplotlib支持並拋出錯誤。 (東西在datetime.fromordinal)

我該如何解決這個問題?

我試圖密謀:

data.index.value.astype(datetime) 

但是,這仍然拋出matplotlib內的錯誤! (Python int不能轉換爲C長)

有沒有一種方法可以防止大熊貓在第一時間破壞數據,當我ix呢?

我使用Python 2.7,Numpy 1.7,pandas 0.11,matplotlib 1.2.1。

編輯:看來,我遇到了同樣的問題在這裏看到: Plot numpy datetime64 with matplotlib

回答

4

我在IPython的筆記本here創建一個最小化工作的例子。

的技巧是使用df.ix如下:答案

df_new=df.ix[start_time:end_time]

僅供參考,我張貼部分來自筆記本的位置:


df

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 1668 entries, 
2013-10-12 07:50:00 to 2013-10-23 21:40:00 
Freq: 10T 
Data columns (total 2 columns): 
column_1 1668 non-null values 
column_2 1668 non-null values  
dtypes: float64(2) 

就像你可能請參閱2013年10月12日7點50分至2013年10月23日21點40分,定義df。 以下是df整個範圍的圖。


df.plot()

enter image description here


現在,我們從10月14日9:30小時選擇數據到10月16日9:30小時。

df2=df.ix['2013-10-14 09:30':'2013-10-16 09:30']

df2.plot()

enter image description here


您可能會看到如何.ix用於選擇區間。您也可以執行如下操作:

df['2013-10-14 09:30':'2013-10-16 09:30'].plot() 

這給出了與以前相同的結果。

欲瞭解更多詳情,請參閱張舍的talk以及附帶的帶熊貓時間系列的IPython notebook。 從韋斯以下兩個談判也應該是非常有幫助的

  1. Time series data analysis with Pandas
  2. Time series manipulation with Pandas
相關問題