在我们处理数据时,需要设置哑变量或者将连续值按照某个标准划分为几类,例如将性别中的男,女替换为0和1,将BMI值划分为偏瘦、正常、偏胖和肥胖四类
数据集
#data
import pandas as pd
dict_data = {'id_card':[111,222,333,444,555,666,777,888],\
'sex':['f','m','m','f','m','f','f','f'],\
'BMI':[31,17.5,24.5,23,18.8,26,30,25]}
df = pd.DataFrame(dict_data)
print(df)
#data_result
id_card sex BMI
0 111 f 31.0
1 222 m 17.5
2 333 m 24.5
3 444 f 23.0
4 555 m 18.8
5 666 f 26.0
6 777 f 30.0
7 888 f 25.0
1. 性别列’sex’置换成0,1
#python新版本 DataFrame移除了 .ix
df.loc[df['sex']=='f','sex'] = 0
df.loc[df['sex']=='m','sex'] = 1
print(df)
#result
id_card sex BMI
0 111 0 31.0
1 222 1 17.5
2 333 1 24.5
3 444 0 23.0
4 555 1 18.8
5 666 0 26.0
6 777 0 30.0
7 888 0 25.0
* map映射方法
# ways-1 字典
# df['sex'] = df['sex'].map({'f':0,'m':1})
# ways-2 函数
df['sex'] = df['sex'].map(lambda x: 0 if x == 'f' else 1)
# result
id_card sex BMI
0 111 0 31.0
1 222 1 17.5
2 333 1 24.5
3 444 0 23.0
4 555 1 18.8
5 666 0 26.0
6 777 0 30.0
7 888 0 25.0
2. BMI(身体质量指数)按照国内标准置换成’偏瘦’,‘正常’,‘偏胖’,‘肥胖’
分类 | BMI(kg/m2) |
---|---|
偏瘦 | <18.5 |
正常 | 18.5~24 |
偏胖 | 24~28 |
肥胖 | ≥ \geq ≥ 28 |
keys: 利用布尔型索引或者利用.index.to_list()拿出对应的行索引
#布尔型索引
pan_1 = df['BMI']<18.5
pan_2 = (df['BMI']>=18.5)&(df['BMI']<24)
pan_3 = (df['BMI']>=24)&(df['BMI']<28)
pan_4 = df['BMI']>=28
df.loc[pan_1,'BMI'] = '偏瘦'
df.loc[pan_2,'BMI'] = '正常'
df.loc[pan_3,'BMI'] = '偏胖'
df.loc[pan_4,'BMI'] = '肥胖'
#.index.to_list()
pan_1 = df[df['BMI']<18.5].index.to_list()
pan_2 = df[(df['BMI']>=18.5)&(df['BMI']<24)].index.to_list()
pan_3 = df[(df['BMI']>=24)&(df['BMI']<28)].index.to_list()
pan_4 = df[df['BMI']>=28].index.to_list()
df.loc[pan_1,'BMI'] = '偏瘦'
df.loc[pan_2,'BMI'] = '正常'
df.loc[pan_3,'BMI'] = '偏胖'
df.loc[pan_4,'BMI'] = '肥胖'
#result
print(df)
id_card sex BMI
0 111 0 肥胖
1 222 1 偏瘦
2 333 1 偏胖
3 444 0 正常
4 555 1 正常
5 666 0 偏胖
6 777 0 肥胖
7 888 0 偏胖