Python : list index out of range error for filling in data set
Python : list index out of range error for filling in data set
我有一个数据集 [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]
从你的问题中不清楚零进入哪个 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]
>>>
以下方法应该有效:
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)
我有一个数据集 [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]
从你的问题中不清楚零进入哪个 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]
>>>
以下方法应该有效:
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)