基于两个虚拟变量创建分类变量的技术求助
修正Gender分类变量的生成代码
你的代码存在两个核心问题:
- 错误地将数值型的
MALE字段(值为1.0/0.0)与字符串'1'做比较,导致条件永远不成立,所有Gender值都被错误设为'Male' - 逻辑完全颠倒:需求是
MALE==1时设为'Male',但你写的是设为'Female'
正确实现方法
方法1:修正np.where逻辑与比较值
import numpy as np import pandas as pd stata_data_P1 = pd.DataFrame({'ID': {0: 5531.0, 1: 2658.0, 2: 5365.0, 3: 4468.0, 4: 3142.0}, 'FEMALE': {0: 1.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 1.0}, 'MALE': {0: 0.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 0.0}, 'AGE': {0: 45.0, 1: 40.0, 2: 38.0, 3: 43.0, 4: 38.0}, 'S': {0: 12.0, 1: 12.0, 2: 15.0, 3: 13.0, 4: 18.0}}) # 修正后的代码 stata_data_P1['Gender'] = np.where(stata_data_P1['MALE'] == 1.0, 'Male', 'Female') stata_data_P1.head()
运行后Gender列会正确显示:Female, Male, Male, Male, Female
方法2:利用map函数映射(更直观)
如果想用FEMALE字段来映射:
stata_data_P1['Gender'] = stata_data_P1['FEMALE'].map({1.0: 'Female', 0.0: 'Male'})
方法3:严谨的多条件赋值(处理异常值)
如果担心数据中出现MALE和FEMALE同时为0/1的异常情况,可以用精准的位置赋值:
stata_data_P1['Gender'] = pd.Series(dtype='object') stata_data_P1.loc[stata_data_P1['MALE'] == 1.0, 'Gender'] = 'Male' stata_data_P1.loc[stata_data_P1['FEMALE'] == 1.0, 'Gender'] = 'Female'
内容的提问来源于stack exchange,提问作者Adam_PythonEnthusist
相关产品推荐
相关产品推荐

