2013-05-09 96 views
7

我使用Matplotlib绘制时间序列数据,并且序列中缺少一些数据。 Matplotlib含蓄加入最后一个连续的数据点指向下一个。但是如果数据丢失,情节看起来很难看。以下是获得的情节。 enter image description hereMatplotlib删除缺失数据的插值

可以看出,在4月30日附近,数据丢失,Matplotlib加入了点。 另外下面的图片是数据的散点图。散点图覆盖了这个错误,但是在这种情况下连续的数据点将不会是联合的。而且,考虑到所涉及的大量数据点,散点图非常缓慢。 enter image description here

这种问题的建议解决方案是什么。

回答

8

如果你能辨认出破发点应该是你可以:

  1. 中断数据和绘制数据通过手中的每个“部分”
  2. 插入np.nan的空白

参见例如Plot periodic trajectories

你可以得到的scatter同样的效果(如果你不想扩大规模或独立的每个点的颜色)与

ax.plot(x, y, linestyle='none', marker='o') 
+0

结束使用熊猫将插入NaN – 2013-05-09 13:31:07

+0

@NipunBatra如果你做了不同的事情,你应该把它写成答案并接受你自己的答案。 – tacaswell 2013-05-09 14:26:41

4

正如前面回答说,你应该将NaN插入那里没有数据。 这个答案是特定于熊猫,并解释了如何轻松实现。或者:

  • Series.resample()
  • Series.reindex()

最简单的方法使用是resample()。这是定期分隔数据的最简洁方式。所以在上面的例子中,如果你有例如5分钟的数据,只是做data.resample("5 min")。这会在缺失值中用'NaT'(相当于NaN的时间)返回你的数据集。

唯一不适用的情况是当你的样品没有规律间隔。

替代方案是reindex(),它也适用于有序(但非时间序列)数据。因此,例如,如果您的数据集的索引编号为0 .. 100,但缺少一些样本,则可以执行data.reindex([0:100])。您还可以通过传递pandas.date_range()函数作为参数来复制resamplereindex的行为。