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

Seaborn catplot报错:Y为float却提示x/y变量均非数值求助

报错原因
  • 核心问题是RMSE和G-MEAN列存储的是列表类型而非标量数值:从你提供的DataFrame样例可以看到,两类指标分别存储为[数值]或者空列表[],直接对列表执行pd.to_numeric转换不会生效,转换后列的dtype仍为object,被Seaborn判定为非数值类型。
  • 你主动将X轴的W列转换为了category分类类型,同样不属于数值类型。Seaborn绘制柱状类分类图时要求至少有一个轴为数值类型(通常为Y轴),两轴都不满足要求时就会触发该报错。
解决方案
  1. 首先将列表类型的指标列转换为标量数值,空列表替换为空值:
import pandas as pd

def list_to_scalar(val):
    # 列表长度大于0取第一个元素,否则设为空值
    if isinstance(val, list):
        return val[0] if len(val) > 0 else pd.NA
    return val

final_df['RMSE'] = final_df['RMSE'].apply(list_to_scalar)
final_df['G-MEAN'] = final_df['G-MEAN'].apply(list_to_scalar)
  1. 再将指标列转换为数值类型:
final_df['RMSE'] = pd.to_numeric(final_df['RMSE'], errors='coerce')
final_df['G-MEAN'] = pd.to_numeric(final_df['G-MEAN'], errors='coerce')
  1. 可选优化:由于RMSE和G-MEAN分别对应不同的FEATURE类型,绘图前可先过滤对应数据避免空值干扰,比如绘制G-MEAN时只保留FEATURE = 'PD'的行:
metric = 'G-MEAN'
plot_df = final_df[final_df['FEATURE'] == ('PD' if metric == 'G-MEAN' else 'PL' if metric == 'RMSE' else '')].copy()
  1. 后续绘图代码无需修改,直接使用处理后的DataFrame即可正常运行。

内容的提问来源于stack exchange,提问作者QueryQuasar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:07