使用PeriodIndex

时间:2019-04-29 13:59:22

标签: python pandas matplotlib plot

我在绘制具有pandas的{​​{1}}数据框时遇到问题。

我的数据有空白,我想实现以下目标:

  • 间隙应保持为间隙,不进行插值;
  • 由于每个值在整个时间段内都是有效的,因此该值应在整个时间段内显示为水平线。
  • 非常棒:在周期边界处没有垂直线。

示例

PeriodIndex

到目前为止,我的代码

  • 通过用yearly = pd.DataFrame({'avSpeed': [50, 40, 20, 16]}, index=pd.PeriodIndex(['2014', '2015', '2018', '2019'], freq='A')) avSpeed 2014 50 2015 40 2018 20 2019 16 填充间隙(通过以不变的频率重新采样)使数据帧无间隙:

    NaN
  • yearly2 = yearly.resample('A').mean() avSpeed 2014 50.0 2015 40.0 2016 NaN 2017 NaN 2018 20.0 2019 16.0 绘制此图:

    steps-post

    enter image description here

还缺少什么:

  • 主要问题:2019年的值仅在年初显示。
  • 也:存在垂直连接线(不需要)。

编辑:解决方案

无需对数据进行上采样或什至用plt.figure() yearly2['avSpeed'].plot(color='red', drawstyle='steps-post') 填补空白!我可以像这样将数据绘制为NaN

hlines

enter image description here

非常感谢@piRSquared向我指出正确的方向。

2 个答案:

答案 0 :(得分:0)

由于这只是您遇到问题的最后一个期间,只需添加一个新的期间(偏移量为nan)即可解决您的问题:

yearly2.loc[yearly2.index[-1] + pd.offsets.YearEnd(1), :] = np.nan

pd.offset指定YearEnd将保留您的PeriodIndex频率,即用A-DEC重采样/创建PeriodIndex时的freq='A'频率。对于其他周期频率,当然应该使用其他偏移量。

答案 1 :(得分:0)

您可以将hlinespandas.PeriodIndex属性start_timeend_time一起使用

ax = plt.subplot()
ax.hlines(yearly, yearly.index.start_time, yearly.index.end_time, 'r', label='avSpeed')
ax.legend()

enter image description here