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

如何正确对Pandas DataFrame的mean radius列进行二值化?

解决Pandas DataFrame中指定列的二值化问题

嘿,我懂你遇到的坑了——你之前写的data_df.loc[data_df["mean radius"] > 12.0] = 0会把满足条件的整行所有列都设为0,这肯定不是你想要的效果对吧?你只是想单独对mean radius列做二值化处理,把大于12.0的值转为0或1,其余值对应另一个状态。

正确的实现方法

下面几种方法都能精准实现只处理mean radius列的需求,你可以根据习惯选择:

方法1:用Pandas loc 精准定位列与条件

这种方法逻辑清晰,先给列赋默认值,再覆盖满足条件的行:

# 先把mean radius列全部设为0(默认值)
data_df["mean radius"] = 0
# 再把其中大于12.0的元素设为1
data_df.loc[data_df["mean radius"] > 12.0, "mean radius"] = 1

如果你的需求是反过来(大于12.0设为0,其余设为1),只需要调整条件和赋值即可。

方法2:用numpy.where 一行搞定

这是更简洁的写法,直接通过条件判断赋值:

import numpy as np
# 条件满足返回1,否则返回0
data_df["mean radius"] = np.where(data_df["mean radius"] > 12.0, 1, 0)

方法3:利用布尔值转整数的特性

Pandas中布尔值True对应整数1,False对应0,所以可以直接把条件判断的结果转成整数:

# 大于12.0返回True→1,否则False→0
data_df["mean radius"] = (data_df["mean radius"] > 12.0).astype(int)

额外:保留原列,新建二值化列

如果不想修改原列,想新增一列存储二值化结果,只需要把列名改成新的即可:

data_df["mean radius_binarized"] = (data_df["mean radius"] > 12.0).astype(int)

为什么你的原代码会出问题?

你之前的代码data_df.loc[data_df["mean radius"] > 12.0] = 0没有指定要修改的列,所以loc选中的是所有满足条件的行,然后把这些行的每一列都赋值为0,这就导致整个行的数据都被覆盖了,出现了你看到的异常结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:37:43