2013-05-09 108 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的行爲。