Python:填充数据集的列表索引超出范围错误

时间:2015-07-20 15:09:21

标签: python list time append indexoutofrangeexception

我的数据集[101,102,105,106,108,111]的相应时间为[1,2,5,6,8,11]。 当第n和第n + 1时间之间的差异不是1时,我需要用零填充数据集。到目前为止,我尝试了很多,这是一个:

for i in xrange(0,10):
    if time[i+1]-time[i] != 1:
       d.insert(i,data[i])
    else :
       d.insert(i,0)

总的来说,我想要一个新的时间集[1,2,3,4,5,6,7,8,9,10,11]和一个新的日期集[101,102,0,0,105,106,0,108,0,0,111]

2 个答案:

答案 0 :(得分:0)

从你的问题中不清楚归零的是哪个bin,但这应该让你知道如何解决这个问题:

>>> data = [101,102,105,106,108,111]
>>> [0 if (d - data[i-1] == 1) else d for i,d in enumerate(data)]
[101, 0, 105, 0, 108, 111]
>>> 

答案 1 :(得分:0)

以下方法应该有效:

import itertools

data_set = [101,102,105,106,108,111] 
data_times = [1,2,5,6,8,11]

new_time_set = range(data_times[0], data_times[-1]+1)
new_data_set = []

last_time = data_times[0]

for data, time in itertools.izip(data_set, data_times):
    new_data_set.extend([0] * (time-last_time-1) + [data])
    last_time = time    

print "Data:", new_data_set
print "Times:", new_time_set

这将打印以下输出:

Data: [101, 102, 0, 0, 105, 106, 0, 108, 0, 0, 111]
Times: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

更新 - 脚本现在使用时间间隔,而不是数据来填补空白。

如果时间序列使用浮点数:

new_time_set = range(int(data_times[0]), int(data_times[-1])+1)