Shapelets平台添加数据集新列时触发IndexError: list index out of range
排查Shapelets
add_column触发IndexError: list index out of range的原因 错误根源
你代码里的核心问题是聚合函数avg的使用方式错误:
shapelets.functions.avg是全局聚合函数,需要作用于整个数据集的列(比如data['age']),用来计算该列的整体平均值。- 但你在
lambda函数里传入了row.age——这是当前行的单个数值,avg函数会尝试将这个单个值当作可迭代对象遍历,进而触发索引越界错误。
修正方案
方案1:预计算全局平均值再使用
先算出整个数据集age列的平均值,再在add_column的逻辑里引用这个值:
import shapelets as sh from shapelets.functions import avg session = sh.sandbox() data = session.from_csv("/root/data.csv") # 预计算age列的全局平均值 age_global_avg = data.agg(avg(data['age'])) # 使用预计算的值生成新列 data.add_column("avg_tot", lambda row: (row.Width * row.Lenght) / age_global_avg)
方案2:直接使用Shapelets列表达式语法
Shapelets支持直接基于列对象进行运算,无需借助lambda,这种方式更简洁且符合框架设计逻辑:
import shapelets as sh from shapelets.functions import avg session = sh.sandbox() data = session.from_csv("/root/data.csv") # 直接用列对象和聚合函数构建表达式 data.add_column("avg_tot", (data['Width'] * data['Lenght']) / avg(data['age']))
内容的提问来源于stack exchange,提问作者Willam Singhs
相关产品推荐
相关产品推荐

