一、对G列数据进行清洗,根据['无','2000-3999','4000-5999','6000-7999','8000-9999','>10000']进行划分
去处重复值
# 删除重复值 # print('删除重复值前大小',data.shape) # # 删除记录 # data = data.drop_duplicates() # print('删除重复值后大小',data.shape)
删除缺失值
"""删除缺失值""" #df.dropna()# 删除出现缺失值得行 # df.dropna(axis=1) #df.dropna(how='any') # 只要出现缺失值就删除 #df.dropna(subset=['房价'])# 指定列出现缺失值才删除 #data.dropna(how='all') # 当整行数据都为nan 时才删除
删除或填充缺失值
"""一、删除或填充缺失值""" data.iloc[1429:] new_data = data.drop(index=range(1430,1780)).fillna({'期望薪资':'无'})
将不同单位的薪资形式,转化成统一形式
"""二、将不同单位的薪资形式,转化成统一形式""" print(new_data['期望薪资'].str[-6:].value_counts())

将不规则的薪资形式转化为统一形式
"""将不规则的薪资形式转化为统一形式""" new_data.loc[new_data['期望薪资'].str[-6:]=='万以下元/年','期望薪资']= '0-2万元/年' new_data.loc[new_data['期望薪资'].str[-5:]=='以下元/月','期望薪资']='0-1500元/月'
new_data['期望薪资'].str[-4:].value_counts()
"""将统一后的不同单位的薪资,统一转化成平均月薪(元/月)"""
def salary_proc(salary): """将传入的薪资转化成统一的平均月薪""" if salary == '无': return 0 elif re.search('元/月',salary): s = re.findall('(\d+)-(\d+)元/月',salary) # s=[('1000','10000')] mi,ma = int(s[0][0]),int(s[0][1]) return (mi+ma)*0.5 elif re.search('万元/年',salary): s = re.findall('(\d+)-(\d+)万元/年',salary) mi,ma = int(s[0][0]),int(s[0][1]) return (mi+ma)*0.5*10000/12 elif re.search('元/年',salary): s = re.findall('(\d+)-(\d+)元/年',salary) mi,ma = int(s[0][0]),int(s[0][1]) return (mi+ma)*0.5/12 else: return -1
"""新增列保存平均月薪""" """一、for 效率低""" new_data['mean_salary']=0 for i in new_data['期望薪资'].index: new_data.loc[i,'mean_salary']=salary_proc(new_data.loc[i,'期望薪资'])
"""二、apply(),矢量化字符串的方法,效率高""" new_data['mean_salary2'] = new_data['期望薪资'].apply(salary_proc)
# new_data.iloc[:,-2:] """三、进行切分""" bins = [0,2000,4000,6000,8000,10000,1000000] labels =['0-2000','2000-3999','4000-5999','6000-7999','8000-9999','>10000'] new_data['salary_class']=pd.cut(new_data['mean_salary'],bins,labels=labels,right=False)# right 改变区间的闭合方式
new_data['salary_class'].value_counts()

二、 对AA列进行清洗,要求分成三类全包含(PhotoShop,Corel DRAW,AI),三项,只包含其中一项或两项,全不包含
处理缺失值
"""处理缺失值""" new_data['技能/语言'].fillna('无',inplace=True)
"""提取技能关键词""" new_data['skill'] = new_data['技能/语言'].str.findall('[a-zA-Z0-9\s#.\+/]+') """处理技能词前后的空格,并统一转化成小写""" new_data['skill2']='' for i in new_data['skill'].index: new_data.loc[i,'skill2']=",".join(map(lambda x:x.strip().lower(),new_data.loc[i,'skill']))
"""将每个人的技能和目标技能进行比较,统计技能数""" new_data['skill_class']=0 s = ['photoshop','corel draw','ai'] for i in new_data['skill2'].index: skill = new_data['skill2'].iloc[i] b = 0 for j in s: if j in skill: b+=1 new_data.loc[i,'skill_class']=b
new_data['skill_class'].value_counts()

new_data['skill_class'].map({0:'全不包含',1:'包含其中一项',2:'包含其中的两项',3:'三项技能全包含'})
