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

创建箱线图时Python分类变量NaN及语法错误的解决咨询

问题解决步骤

一、搞定Memory列的NaN问题

你的RAM列数据格式不统一,有带空格的(比如'12 GB')、带GB后缀的(比如'6GB')、纯数字的(比如'6'),直接用pd.to_numeric转的话,带非数字字符的内容会被强制转成NaN,导致分箱后出现空值。按下面步骤处理:

  1. 先把RAM列里的数字提取出来,统一转成整数:
# 注意:样本里列名是'RAM',不是你代码里写的'RAM '(多了个空格),要对应实际列名
df['RAM_clean'] = df['RAM'].str.extract('(\d+)').astype(int)

这段正则会把所有数字字符抠出来,不管原来的格式是什么,都能得到纯数字的RAM值。

  1. 重新生成Memory分类列:
df['Memory'] = pd.cut(df['RAM_clean'], 
                      bins=[0,4,8,12], 
                      include_lowest=True, 
                      labels=['Basic', 'Intermediate', 'Advanced'])

(顺便提一句,你之前标签写的'Advaced'是拼写错误,改成'Advanced'更准确)

二、修复箱线图的语法错误

你不能把数据赋值的代码直接塞到sns.boxplot的data参数里,这属于语法错误,Python不允许这么写。正确做法是先把所有数据处理好,再调用绘图函数:

完整流程代码:

import pandas as pd
import seaborn as sns

# 1. 清理RAM列
df['RAM_clean'] = df['RAM'].str.extract('(\d+)').astype(int)

# 2. 创建Memory分类列
df['Memory'] = pd.cut(df['RAM_clean'], 
                      bins=[0,4,8,12], 
                      include_lowest=True, 
                      labels=['Basic', 'Intermediate', 'Advanced'])

# 3. 别忘了清理Price列!样本里Price带$符号和空格,得转成数值才能绘图
df['Price_clean'] = df['Price'].str.replace('$', '', regex=False).str.strip().astype(float)

# 4. 绘制箱线图
sns.boxplot(x='Memory', y='Price_clean', data=df)

额外提醒

  • 确认你的DataFrame列名:代码里的列名要和实际数据一致,你之前写的RAM (带空格)和样本里的RAM(无空格)不一样,别因为这个踩坑。
  • 如果还有NaN,检查RAM里有没有完全不含数字的行,这种情况需要单独处理(比如删除或填充)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:23:12