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

use*_*987 2 python numpy matplotlib pandas

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

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

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

data = data.ix[data.index >= start_time]
data = data.ix[data.index <= end_time]
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能解决这个问题?

我试过密谋:

data.index.value.astype(datetime)
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:似乎我遇到了与此处所见相同的问题: 使用matplotlib绘制numpy datetime64

Nip*_*tra 5

我在这里的IPython笔记本中创建了一个最小的工作示例.

诀窍是使用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)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,df定义于2013年10月12日7:50至2013年10月23日21:40.以下是整个范围内的情节df.


df.plot()

在此输入图像描述


现在,我们从10月14日9:30到10月16日9:30选择数据.

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

df2.plot()

在此输入图像描述


您可能会看到如何.ix使用选择间隔.您也可以执行以下相同的操作:

df['2013-10-14 09:30':'2013-10-16 09:30'].plot()
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请参阅Chang She的演讲以及伴随Pandas的Time Series上随附的IPython 笔记本.来自Wes的以下两次会谈也应该非常有帮助

  1. 使用Pandas进行时间序列数据分析
  2. 使用Pandas进行时间序列操作