Python中如何将分类变量按值转为二元变量?目标变量二值化遇困
解决目标变量二值化问题:将浮点数quality转为poor/good或0/1
你遇到的问题很典型——用replace()处理连续浮点数确实行不通,因为没法枚举所有可能的取值。以下几种方法能轻松解决这个问题,直接把结果存入你的DataFrame:
方法1:用numpy.where(最简洁直接)
这是处理条件赋值最常用的方法,一行代码搞定:
import numpy as np import pandas as pd # 添加文本标签列(poor/good) df['quality_label'] = np.where(df['quality'] < 6.5, 'poor', 'good') # 如果需要直接存0/1数值 df['quality_binary'] = np.where(df['quality'] < 6.5, 0, 1)
原理:np.where会遍历每一个quality值,满足<6.5就返回第一个值,否则返回第二个,直接赋值给新列即可。
方法2:用pandas.cut(适合分箱场景)
如果以后需要调整分箱阈值,这个方法更灵活:
# 分箱并生成文本标签 df['quality_label'] = pd.cut( df['quality'], bins=[-np.inf, 6.5, np.inf], # 用-inf和inf确保覆盖所有0-10的浮点数 labels=['poor', 'good'] ) # 生成0/1数值列(转成int类型) df['quality_binary'] = pd.cut( df['quality'], bins=[-np.inf, 6.5, np.inf], labels=[0, 1] ).astype(int)
方法3:用apply自定义函数(灵活度最高)
如果需要更复杂的逻辑,自定义函数+apply也能解决:
# 自定义函数返回文本标签 def get_quality_label(x): return 'poor' if x < 6.5 else 'good' df['quality_label'] = df['quality'].apply(get_quality_label) # 用lambda表达式直接返回数值,更简洁 df['quality_binary'] = df['quality'].apply(lambda x: 0 if x < 6.5 else 1)
不管用哪种方法,都是直接给df新增列赋值,结果会自动存入你的数据集里。
内容的提问来源于stack exchange,提问作者Trinity Newsome
相关产品推荐
相关产品推荐

