创建wandb.Table时报错AssertionError: columns参数需为list对象
报错原因
wandb.Table()的第一个位置参数定义为columns,要求传入列名组成的列表。你直接将pandas DataFrame作为第一个位置参数传入时,接口会将该DataFrame识别为columns参数的值做类型校验,因此触发要求传入list对象的断言错误,和是否需要把DataFrame转成列表没有关系。
正确实现方法
不需要手动将DataFrame转为列表,使用官方支持的关键字参数传参即可直接从pandas DataFrame创建wandb.Table:
wandb.init(project='my-xgb', config={'lr': 0.01}) # 原有训练、指标日志逻辑可正常保留 # wandb.log({'loss': loss, ...}) # 显式通过dataframe参数传入你的DataFrame对象 table = wandb.Table(dataframe=df1)
如果需要自定义展示的列、或者过滤数据,也可以手动拆分传入列名和数据:
# 示例:只选取df1中指定的列创建Table use_cols = ['feature1', 'feature2', 'label'] table = wandb.Table( columns=use_cols, data=df1[use_cols].values.tolist() )
注意事项
- 优先使用
dataframe=关键字传参的方式,这种写法会自动保留DataFrame的列名、数据类型,不会出现字段错位、类型异常的问题,比手动转列表更稳定。 - 创建完成的Table需要传入
wandb.log()才能同步到W&B后台,例如wandb.log({"dataset_preview": table})。
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

