如何用回归模型填充Pandas数据框中缺失的Avg Monthly Long Distance Charges值?
用OLS回归填充Pandas数据框缺失值并更新原数据框
核心实现步骤
通过拆分数据集、训练模型、预测缺失值,最后精准定位原数据框的缺失位置完成赋值,具体代码如下:
拆分数据集
先将数据分为「无缺失值的训练集」和「含缺失值的待预测集」,确保模型训练仅使用完整数据:import pandas as pd import statsmodels.api as sm # 定义目标列和特征列 target_col = 'Avg Monthly Long Distance Charges' feature_cols = ['Monthly Charge', 'Total Charges', 'Total Long Distance Charges'] # 拆分训练集(无缺失值)和待预测集(有缺失值) df_train = df.dropna(subset=[target_col]) df_missing = df[df[target_col].isna()]训练OLS回归模型
使用statsmodels构建OLS模型并拟合训练数据(注意添加截距项):# 给特征添加截距项(OLS模型要求) X_train = sm.add_constant(df_train[feature_cols]) y_train = df_train[target_col] # 拟合模型 model = sm.OLS(y_train, X_train).fit()预测缺失值
用训练好的模型对含缺失值的行生成预测结果:# 给待预测特征添加截距项 X_missing = sm.add_constant(df_missing[feature_cols]) predicted_values = model.predict(X_missing)更新原数据框
通过.loc精准定位原数据框中目标列的缺失位置,将预测值赋值进去:df.loc[df[target_col].isna(), target_col] = predicted_values
补充说明
- 如果特征列(
feature_cols)本身存在缺失值,需先处理(比如均值填充、删除含缺失的行),否则模型无法正常训练。 - 也可以用
sklearn的LinearRegression实现,逻辑一致:from sklearn.linear_model import LinearRegression model_sklearn = LinearRegression() model_sklearn.fit(df_train[feature_cols], y_train) predicted_values = model_sklearn.predict(df_missing[feature_cols]) # 更新原数据框 df.loc[df[target_col].isna(), target_col] = predicted_values
内容的提问来源于stack exchange,提问作者c200402
相关产品推荐
相关产品推荐

