用scipy替换空数据

2024-06-26 00:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用scipy替换少量的空数据,而不必用一条不切实际的线性线将它们连接起来(数据要可视化)。我看过一些文档和示例,但很难将我所看到的与我的上下文中的用法联系起来。你知道吗

例如,在下面这样一段时间内

enter image description here

我有一个方法来查找这组空条目之前的最后一个值和之后的第一个值。你知道吗

如何使用这些值并返回一个包含三个插值的对象来写入数据集?你知道吗

编辑:

我试图从包含一系列空值的两个实值的数据创建两个numpy数组。我从我编写的SQLServer类中获取列表形式的数据。我试着这样做

    time = connection.getColumnData('DateTimeStamp', table, extreme_values['start_time'] + '.000', extreme_values['end_time'] + '.000')
    val = connection.getColumnData(column, table, extreme_values['start_time'] + '.000', extreme_values['end_time'] + '.000')
    time = [str(d) for d in time]
    #val = [float(d) for d in val]

    val_num = np.asarray(val, dtype=float)
    time_num = np.asarray(time, dtype='datetime64')
    not_nan = ~np.isnan(val_num, dtype=bool)

但它在运行时在线路上中断

    filled_data = np.interp(time_num, time_num[not_nan], val_num[not_nan])

每节课举行一次

array([ 5.625 ,     nan,     nan,     nan,  5.4375])

在时间上

array(['2012-04-05T07:30:00+0000', '2012-04-05T08:00:00+0000',
   '2012-04-05T08:30:00+0000', '2012-04-05T09:00:00+0000',
   '2012-04-05T09:30:00+0000'], dtype='datetime64[s]')

不在不在

 array([ True, False, False, False,  True], dtype=bool)

Tags: 数据falsetimenptablenotvalnan
1条回答
网友
1楼 · 发布于 2024-06-26 00:25:53

假设您的数据位于两个numpy数组中(称它们为datatimestamp),并且您希望根据它们的时间戳在data数组中填充NaN值,您可以使用^{}

not_nan = ~numpy.isnan(data)
filled_data = numpy.interp(timestamp, timestamp[not_nan], data[not_nan])

编辑:将数据放入numpy数组实际上是一个棘手的部分。我猜您的getColumnData调用的结果主要是数字,在NULL处有一些None值。让我们看看在这种情况下会发生什么:

In [3]: np.array([4,3,None,4,2,1])
Out[3]: array([4, 3, None, 4, 2, 1], dtype=object)

In [4]: np.isnan(_)
                                     -
TypeError                                 Traceback (most recent call last)
<ipython-input-4-4328b1685393> in <module>()
  > 1 np.isnan(_)

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

None的存在意味着numpy不知道这是一个数字数组,这就是numpy.isnan调用失败的原因。我们可以通过告诉numpy我们实际上需要一个数字数组来解决这个问题:

In [7]: np.array([4,3,None,4,2,1], dtype=float)
Out[7]: array([  4.,   3.,  nan,   4.,   2.,   1.])

In [8]: np.isnan(_)
Out[8]: array([False, False,  True, False, False, False], dtype=bool)

相关问题 更多 >