You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用回归模型填充Pandas数据框中缺失的Avg Monthly Long Distance Charges值?

用OLS回归填充Pandas数据框缺失值并更新原数据框

核心实现步骤

通过拆分数据集、训练模型、预测缺失值,最后精准定位原数据框的缺失位置完成赋值,具体代码如下:

  1. 拆分数据集
    先将数据分为「无缺失值的训练集」和「含缺失值的待预测集」,确保模型训练仅使用完整数据:

    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()]
    
  2. 训练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()
    
  3. 预测缺失值
    用训练好的模型对含缺失值的行生成预测结果:

    # 给待预测特征添加截距项
    X_missing = sm.add_constant(df_missing[feature_cols])
    predicted_values = model.predict(X_missing)
    
  4. 更新原数据框
    通过.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:24:07