【发布时间】:2016-07-30 05:48:13
【问题描述】:
我正在处理一些大型数据集 - 作为时间函数的观察结果 - 这些数据集在时间上是不连续的(即,有很多缺失的数据,没有完整的记录)。为了好玩,有很多数据集,都有缺失的记录,都在随机的地方……
不知何故,我需要及时“同步”数据,将丢失的数据标记为丢失数据,而不是完全不存在。我已经设法让这部分工作,但我仍然遇到一些问题。
例子:
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 中,它应该丢弃该值,而不是在开头(或结尾)插入它。知道如何轻松实现这一目标吗?
【问题讨论】:
-
这种任务正是 pandas 擅长的。
-
是的,我很害怕……我和熊猫有点爱恨交加;它似乎非常有用,但我也觉得入门有点困难。