问题描述:在数据预处理时,往往需要对描述性数据进行分类赋值或对数据进行分级赋值。
首先,会想到用for循环,依次判断赋值:
for n in range(len(data1)):
print(n)
if data1['文化程度'][n] == '小学':
data1['文化程度得分'][n] = 1
elif data1['文化程度'][n] == '初中':
data1['文化程度得分'][n] = 2
elif data1['文化程度'][n] == '高中':
data1['文化程度得分'][n] = 3
elif data1['文化程度'][n] == '大专':
data1['文化程度得分'][n] = 4
elif data1['文化程度'][n] == '本科及以上':
data1['文化程度得分'][n] = 5
else:
data1['文化程度得分'][n] = 0
但是,当数据量较大时,这种处理方式十分耗时
于是寻找其他方式,利用.loc选取数据进行赋值,由于目前对python还处于初级阶段,没有找到直接赋值的简单方法,于是先利用.loc选取,再用.concat将数据拼接起来
da1 = data.loc[data['文化程度'] == '小学']
da1['文化程度得分'] = 1
da2 = data.loc[data['文化程度'] == '初中']
da2['文化程度得分'] = 2
da3 = data.loc[data['文化程度'] == '高中']
da3['文化程度得分'] = 3
da4 = data.loc[data['文化程度'] == '大专']
da4['文化程度得分'] = 4
da5 = data.loc[data['文化程度'] == '本科及以上']
da5['文化程度得分'] = 5
da6 = data.loc[data['文化程度'] == '文盲或半文盲']
da6['文化程度得分'] = 0
da7 = data.loc[data['文化程度'].isnull()]
da7['文化程度得分'] = 0
data1 = pd.concat([da1,da2,da3,da4,da5,da6,da7],axis=0,ignore_index=True)
#参数axis=0表示上下合并,1表示左右合并,ignore_index=True表示忽略原来的索引
目前编程水平有限,如果您有较好的方法,也可以留言给我,感谢!