Python报错SyntaxError: can't assign to operator及特征空值填充咨询
报错解决方案
你遇到的语法错误是Python变量命名规则不合法导致的:Python变量名仅允许包含字母、数字、下划线,且不能以数字开头,不能包含/这类运算符。你的代码中missing_/sqft_X_train、missing_/sqft_y_train、missing_/sqft_X_test三个变量名包含/,解释器会将/识别为除法运算符,因此抛出can't assign to operator错误。
你只需要将变量名中的/替换为下划线等合法字符即可,同时你查找空值索引的逻辑可以用pandas内置方法优化,修正后的代码参考:
# 优化空值索引查找,无需循环 missing_idx = data2[data2['Rupee/sq.ft'].isna()].index non_missing_idx = data2[~data2['Rupee/sq.ft'].isna()].index # 独立特征 missing_sqft_X_train = np.array([ [data2['Bedrooms'][i],data2['Bathrooms'][i],data2['Condtion'][i],data2['Purchase Type'][i],data2['Real Estate Regulation Act'][i] ] for i in non_missing_idx ]) # 目标特征,如果你仅需要填充Rupee/sq.ft,这里可以只保留该列即可 missing_sqft_y_train = np.array([ [data2['Rupee/sq.ft'][i],data2['Price (Lakhs)'][i],data2['Area'][i] ] for i in non_missing_idx ]) missing_sqft_X_test = np.array([ [data2['Bedrooms'][i],data2['Bathrooms'][i],data2['Condtion'][i],data2['Purchase Type'][i],data2['Real Estate Regulation Act'][i] ] for i in missing_idx ])
特征依赖型空值的其他填充方法
当空值特征和其他特征存在明显依赖关系时,除了你用到的基于分类/回归模型预测填充的方案,还有以下常用的合适方案:
- 分组统计填充:先按和目标特征相关性最高的分类特征分组,用分组内的均值、中位数、众数填充空值,比如按户型、所在区域分组后用同组的单位房价均值填充空值,精度远高于全局统计值填充。
- K近邻填充(KNN Imputer):计算特征空间中距离空值样本最近的K个非空样本,用这K个样本的目标特征均值/众数填充空值,无需提前训练模型,适合小样本、特征相关性高的场景。
- 多重插补(MICE):通过多轮迭代对每个存在缺失的特征分别基于其他特征建模填充,会考虑缺失值的不确定性,可输出多组填充结果供后续模型验证,是工业界处理相关缺失值的主流方案之一。
- 树模型预测填充:用随机森林、XGBoost、LightGBM等树模型拟合非空样本的特征关系,树模型天然支持处理离散特征、非线性关系,拟合精度通常高于线性的SGD模型。
内容的提问来源于stack exchange,提问作者Akhil Sahukaru
相关产品推荐
相关产品推荐

