我正在處理一些大數據集 - 作爲時間函數的觀測值 - 這些數據集在時間上並不連續(即存在大量缺失數據,其中完整記錄缺席)。爲了讓事情變得有趣,有很多數據集,所有的丟失記錄,都在隨機的地方...用缺失值重映射`numpy.array`
我以某種方式需要及時獲取數據「同步」,缺少數據標記爲缺失數據,而不是完全沒有。我設法讓這部分工作,但我仍然有一些問題。
實施例:
import numpy as np
# The date range (in the format that I'm dealing with), which I define
# myself for the period in which I'm interested
dc = np.arange(2010010100, 2010010106)
# Observation dates (d1) and values (v1)
d1 = np.array([2010010100, 2010010104, 2010010105]) # date
v1 = np.array([10, 11, 12 ]) # values
# Another data set with (partially) other times
d2 = np.array([2010010100, 2010010102, 2010010104]) # date
v2 = np.array([13, 14, 15 ]) # values
# For now set -1 as fill_value
v1_filled = -1 * np.ones_like(dc)
v2_filled = -1 * np.ones_like(dc)
v1_filled[dc.searchsorted(d1)] = v1
v2_filled[dc.searchsorted(d2)] = v2
這使我所期望的結果:
v1_filled = [10 -1 -1 -1 11 12]
v2_filled = [13 -1 14 -1 15 -1]
但只有當在d1
或d2
值也是在dc
;如果在d1
或d2
一個值不在dc
代碼失敗,因爲然後searchsorted
表現爲:
如果沒有合適的索引,返回0或N(其中N是
a
長度)。
因此,舉例來說,如果我改變d2
和v2
到:
d2 = np.array([2010010100, 2010010102, 2010010104, 0]) # date
v2 = np.array([13, 14, 15, 9999]) # values
結果是
[9999 -1 14 -1 15 -1]
在這種情況下,因爲d2=0
不dc
,應該丟棄值,而不是在開始(或結束)插入它。任何想法如何輕鬆實現?
這種類型的任務正是熊貓所擅長的。 – shx2
是的,我很擔心這一點..我和熊貓有一點愛和恨的關係;它似乎非常有用,但我也覺得開始有點困難。 – Bart