【问题标题】:Python - Trouble plotting datetime index with pandas and matplotlibPython - 无法使用 pandas 和 matplotlib 绘制日期时间索引
【发布时间】:2013-10-20 06:24:29
【问题描述】:

我正在加载一个数据文件,提取某些列,并使用 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)

有什么方法可以防止 pandas 在我修复数据时破坏数据?

我正在使用 Python 2.7、Numpy 1.7、pandas 0.11、matplotlib 1.2.1。

编辑:看来我遇到了与此处相同的问题: Plot numpy datetime64 with matplotlib

【问题讨论】:

    标签: python numpy matplotlib pandas


    【解决方案1】:

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


    现在,我们选择从 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()
    

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

    有关更多详细信息,您可以参考 Chang She 的 talk 和随附的 IPython notebook on Time Series with Pandas。 韦斯的以下两篇演讲也应该很有帮助

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

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多