PyWeka3调用attribute_names与subset方法报AttributeError如何解决?
PyWeka3报错解决方案
原因
你遇到的两个AttributeError是因为当前环境下加载得到的Instances对象是底层Java映射的原生对象,没有官方示例里的Python层封装的快捷方法,要么是版本过低,要么是加载后没有做Python封装转换。
修复步骤
第一步:升级到最新版本的依赖库
执行命令:pip install --upgrade python-weka-wrapper3第二步:调整加载逻辑,转换为带封装方法的实例
升级后如果仍报错,需要用to_python_instances方法对加载的原生对象做转换,完整可运行代码如下:
from weka.core.converters import load_any_file from weka.core.dataset import to_python_instances # 加载arff文件 raw_data = load_any_file("/home/pablo/Escritorio/weka-3-9-5/data/iris.arff") # 转换为带Python封装快捷方法的实例对象 data = to_python_instances(raw_data) print(data.attribute_names(), data.num_instances) # 按列名选择列 subset = data.subset(col_names=['sepallength', 'sepalwidth', 'petallength', 'petalwidth']) print(subset.attribute_names(), subset.num_instances) # 按范围选择列(1开始的索引) subset = data.subset(col_range='1-3,5') print(subset.attribute_names(), subset.num_instances) # 按范围选择行(1开始的索引) subset = data.subset(row_range='51-150') print(subset.attribute_names(), subset.num_instances) # 反向选择行列并保留原数据集名称 subset = data.subset(col_range='5', invert_cols=True, row_range='51-150', invert_rows=True, keep_relationame=True) print(subset.attribute_names(), subset.num_instances)
原生API替代方案
如果你不想使用封装方法,也可以直接调用原生API实现同等功能:
- 获取所有属性名:
[attr.name for attr in data.attributes()] - 筛选列/行:使用
weka.filters模块下的对应过滤器实现子集提取
内容的提问来源于stack exchange,提问作者Pablo Moreira Garcia
相关产品推荐
相关产品推荐

