机器学习薪资预测模型数据清洗时TypeError报错解决求助
解决Python数据清洗中TypeError: float() argument must be a string or a real number, not 'NoneType'问题
错误原因
你的clean_experience函数未处理None/空值,当YearsCodePro列中存在None时,直接执行float(x)会触发类型错误。
修正方案
方案1:在函数内部处理None值
在函数开头增加对None的判断,返回符合业务需求的默认值(比如0或NaN):
def clean_experience(x): if x is None: return 0 # 若需要保留空值特征,可返回np.nan,后续用dropna()删除 if x == 'More Than 50 years': return 50 if x == 'Less than 1 year': return 0.5 return float(x) df['YearsCodePro'] = df['YearsCodePro'].apply(clean_experience)
方案2:先统一替换DataFrame中的空值
先通过fillna()将列内的空值替换为可转换为float的内容,再应用原函数:
# 把None替换为'0',也可根据业务选择其他值 df['YearsCodePro'] = df['YearsCodePro'].fillna('0') def clean_experience(x): if x == 'More Than 50 years': return 50 if x == 'Less than 1 year': return 0.5 return float(x) df['YearsCodePro'] = df['YearsCodePro'].apply(clean_experience)
方案3:用pandas内置函数简化处理
利用pd.to_numeric的errors参数自动处理异常值,同时替换特殊字符串:
# 先替换特殊文本为对应数字字符串 df['YearsCodePro'] = df['YearsCodePro'].replace({ 'More Than 50 years': '50', 'Less than 1 year': '0.5' }) # coerce参数会把无法转换的值转为NaN,后续可按需填充或删除 df['YearsCodePro'] = pd.to_numeric(df['YearsCodePro'], errors='coerce')
内容的提问来源于stack exchange,提问作者CHITRA ATLANI
相关产品推荐
相关产品推荐

