如何正确对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
相关产品推荐
相关产品推荐

