def function1(self,*windows):
xxx_per_win = [[] for _ in windows]
for i in range(max(windows),self.file.shape[0]):
for j in range(len(windows)):
zz = self.file['temp'][i-windows[j]:i].quantile(0.25)
...
...
...
o = classX(file)
windows = [3,10,20,40,80]
output = o.function1(windows)
如果我运行上面的代码,则显示:
for i in range(max(windows),self.file.shape[0]):
TypeError: 'list' object cannot be interpreted as an integer
和:
zz = self.file['temp'][i-windows[j]:i].quantile(0.25)
TypeError: unsupported operand type(s) for -: 'int' and 'list'
仅当窗口长度可变时(即* windows而不仅仅是Windows),才会发生此问题(仅)。
该如何解决?是什么原因造成的?
答案 0 :(得分:2)
max
函数希望传递多个参数,而不是包含多个参数的元组。您的windows
变量是一个元组。
所以,不是:
for i in range(max(windows),self.file.shape[0]):
执行此操作:
for i in range(max(*windows),self.file.shape[0]):
关于第二个错误,涉及以下行:
zz = self.file['temp'][i-windows[j]:i].quantile(0.25)
# TypeError: unsupported operand type(s) for -: 'int' and 'list'
好吧,您正在减去,并且抱怨您不能从整数中减去列表。而且由于我不知道windows[j]
包含什么,所以我不能说是否有列表。但是,如果有,就不能。您尚未给我们提供一个可行的示例进行尝试。
我建议您做的是在代码中放入一些调试输出,例如:
print('i=%s, j=%s, windows[j]=%s' % (i, j, windows[j]))
然后查看您的数据是什么样的。