Python - 无法使用pandas和matplotlib绘制日期时间索引

时间:2013-10-12 04:33:17

标签: python numpy matplotlib pandas

我正在加载数据文件,提取某些列,并使用matplotlib将它们绘制为PDF格式。

当我将数据文件加载到Pandas中时,我得到一个DateTimeIndex。如果我以这种形式绘制数据,一切顺利。

当我根据时间选择数据子集时出现问题,即:

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

现在当我去绘制数据时,pandas似乎已经改变了一些东西,因为DateTimeIndex是一个npdatetime64类型的数组,matplotlib显然不支持它并抛出错误。 (在datetime.fromordinal中的东西)

如何解决这个问题?

我尝试过绘图:

data.index.value.astype(datetime)

但是这仍然会在matplotlib中引发错误! (Python int无法转换为C long)

有没有办法可以防止大熊猫在我用它时破坏数据呢?

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

编辑:似乎我遇到了与此处所见相同的问题: Plot numpy datetime64 with matplotlib

1 个答案:

答案 0 :(得分:5)

我在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)

如您所见,df定义于2013年10月12日7:50至2013年10月23日21:40。 以下是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()

这给出了与以前相同的结果。

有关详细信息,您可以参考Chang She的talk和随附的关于Pandas时间序列的IPython notebook。 来自Wes的以下两个演讲也应该非常有用

  1. Time series data analysis with Pandas
  2. Time series manipulation with Pandas