Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何填补系列中未知大小的空白_Python_List - Fatal编程技术网

Python 如何填补系列中未知大小的空白

Python 如何填补系列中未知大小的空白,python,list,Python,List,我有一个非常大的连续值数据集,包含不同大小和频率的间隙 序列中每个数字之间的差值保持不变,但在间隙中断后,序列不一定从原始序列中的某个点开始 一个非常简单的例子是:1,3,5,7,14,16,18,20,还有我用来测试的东西 我实际使用的数据样本:1996.40197023, 1996.40199193, 1996.40201362, 1996.40203531, 1996.40240752, 1996.40242921, 1996.40245091, 1996.40247257, 1996.4

我有一个非常大的连续值数据集,包含不同大小和频率的间隙

序列中每个数字之间的差值保持不变,但在间隙中断后,序列不一定从原始序列中的某个点开始

一个非常简单的例子是:1,3,5,7,14,16,18,20,还有我用来测试的东西

我实际使用的数据样本:1996.40197023, 1996.40199193, 1996.40201362, 1996.40203531, 1996.40240752, 1996.40242921, 1996.40245091, 1996.40247257, 1996.40249426, 1996.40251592.

这是我迄今为止努力实现这一目标的方式:

date = [1, 3, 5, 7, 9, 14, 16, 18, 20]
ndate = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

diff  = 2

for i in range(9):
for j in range(15):

    if date[i+1]-date[i] > diff:
        ndate[j+1] == date[i+1] + diff
    elif ndate[j+1] - date[i+1] > diff:
        ndate[j]+diff == ndate[j+1]
    else: 
        ndate[j] == date[i+1]

print ndate
但我不断得到列表索引超出范围的类型错误

考虑到我有超过84000个数据点要处理,这是正确的方法还是有更好的方法


谢谢

假设您希望生成输出,以使间隙值或多或少保持一致,我会在这里使用基于生成器的方法。 从原始系列中一次生成一个元素,如果到下一个元素的间距大于预期的增量,则动态生成填充值,直到赶上:

def smooth(series, delta=2, tol=0.001):
    it = iter(series)
    last = next(it)
    yield last
    for i in it:
        while abs(i - (last + delta)) > tol:
            last += delta
            yield last
        last = i
        yield last
例如:

list(smooth([1, 3, 5, 7, 9, 14, 16, 18, 20]))
# [1, 3, 5, 7, 9, 11, 13, 14, 16, 18, 20]

s = [1996.40197023, 1996.40199193, 1996.40201362, 1996.40203531, 
     1996.40240752, 1996.40242921, 1996.40245091, 1996.40247257, 
     1996.40249426, 1996.40251592]
list(smooth(s, delta=s[1]-s[0], tol=1e-7))
# [1996.40197023, 1996.40199193, 1996.40201362, 1996.40203531, 1996.40205701, 1996.4020787099998, 1996.4021004099998, 1996.4021221099997, 1996.4021438099996, 1996.4021655099996, 1996.4021872099995, 1996.4022089099994, 1996.4022306099994, 1996.4022523099993, 1996.4022740099992, 1996.4022957099992, 1996.4023174099991, 1996.402339109999, 1996.402360809999, 1996.402382509999, 1996.4024042099988, 1996.40240752, 1996.40242921, 1996.40245091, 1996.40247257, 1996.40249426, 1996.40251592]

这将需要手动指定增量和公差,但您可能需要编写函数来识别它们。

您希望从简化的示例中获得什么输出?您的程序是一个缩进错误。请修理。顺便说一句,每个数字之间没有意义。中间总是介于两件事之间。我建议从创建一个辅助数组开始,它是原始数组中连续元素之间的差异,并在其中寻找模式-即从[date[I]-date[I-1]开始,对于xrange1中的I,lendate]…非常感谢,这非常适合我的数据集!如何更改增加和减少的数据集以及变化的增量的公差,例如,增量是前两个值之间的差值?这将用于通过正值和负值的X、Y、Z数据集的坐标位置数据。要填补的空白与原始数据集的位置相同(如果有任何用处的话);只需检查i是否tol:last+=delta收益率last-else:while abssigma+tol>i-last:last+=deltayield last=i yield last temp=listmoothdata2,delta=data2[1]-data2[0],tol=1e-7并获取了错误存储器错误