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
我在这里的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的以下两次会谈也应该非常有帮助