You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:36:01