gpt4 book ai didi

python - 使用缺失值重新映射 `numpy.array`

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:16 25 4
gpt4 key购买 nike

我正在处理一些大型数据集 - 作为时间函数的观察结果 - 这些数据在时间上不连续(即,存在大量丢失的数据,缺少完整的记录)。为了让事情变得有趣,有很多数据集,所有数据集都缺少记录,并且都在随机位置......

我以某种方式需要及时“同步”数据,将丢失的数据标记为丢失的数据,而不是完全不存在。我已经设法让这个部分工作,但我仍然遇到一些问题。

示例:

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]

但前提是 d1d2 中的值也在 dc 中;如果 d1d2 中的值不在 dc 中,则代码会失败,因为 searchsorted 的行为如下:

If there is no suitable index, return either 0 or N (where N is the length of a).

例如,如果我将 d2v2 更改为:

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 中,因此它应该丢弃该值,而不是将其插入到开头(或结尾)。知道如何轻松实现这一目标吗?

最佳答案

如果在调用 dc.searchsorted(d2) 之前执行 d2 = np.intersect1d(dc, d2) ,它将删除 d2 中不在 dc 中的所有元素.

关于python - 使用缺失值重新映射 `numpy.array`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38658811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com