【发布时间】:2019-09-29 22:59:04
【问题描述】:
我的一般问题是我有一个数据框,其中列对应于特征值。数据框中还有一个日期列。每个特征列可能缺少 NaN 值。我想用一些填充逻辑填充一列,例如“fill_mean”或“填充零”。
但我不想只将填充逻辑应用于整个列,因为如果较早的值之一是 NaN,我不希望我为这个特定 NaN 填充的平均值被后来的平均值所污染on,什么时候模型应该不知道。本质上,这是一个常见问题,即不向您的模型泄露有关未来的信息 - 特别是在尝试填充我的时间序列时。
无论如何,我已将问题简化为几行代码。这是我对上述一般问题的简化尝试:
#assume ts_values is a time series where the first value in the list is the oldest value and the last value in the list is the most recent.
ts_values = [17.0, np.NaN, 12.0, np.NaN, 18.0]
nan_inds = np.argwhere(np.isnan(ts_values))
for nan_ind in nan_inds:
nan_ind_value = nan_ind[0]
ts_values[nan_ind_value] = np.mean(ts_values[0:nan_ind_value])
上述脚本的输出为:
[17.0, 17.0, 12.0, 15.333333333333334, 18.0]
这正是我所期望的。
我对此的唯一问题是,它与数据集中的 NaN 数量呈线性关系。有没有办法在我不迭代 nan 索引值的常量或日志时间内做到这一点。
【问题讨论】:
-
我认为没有循环是不行的,我们可以尝试使用numba来加快速度
标签: python pandas numpy time-series data-science