Python 如何填补系列中未知大小的空白
我有一个非常大的连续值数据集,包含不同大小和频率的间隙 序列中每个数字之间的差值保持不变,但在间隙中断后,序列不一定从原始序列中的某个点开始 一个非常简单的例子是: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. 这是我迄今为止努力实现这一目标的方式: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
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是否