如何用其他列回归预测填充DataFrame中stock_2021列的缺失值?
解决方法
核心问题分析
你的代码存在两个关键疏漏:
- 未完成模型训练的核心步骤(
model01既未定义也未拟合有效数据) - 未区分「用于训练的完整样本」和「需要填充的缺失样本」,直接用全量数据预测必然返回异常结果
完整解决步骤与代码
步骤1:拆分数据集
从原DataFrame中分离出两类数据:
- 训练集:
stock_2021无缺失的行,用来训练回归模型 - 待填充集:
stock_2021为NaN的行,需要模型预测填充
步骤2:训练回归模型
用训练集的stock_2020作为特征,stock_2021作为目标变量,拟合线性回归模型。
步骤3:预测并填充缺失值
用训练好的模型对待填充集的stock_2020数据做预测,将结果替换回原DataFrame的缺失位置。
import pandas as pd import statsmodels.api as sm # 1. 拆分训练集与待填充数据 train_data = df_atom.dropna(subset=['stock_2021']) fill_data = df_atom[df_atom['stock_2021'].isna()] # 2. 准备训练数据并拟合模型 X_train = sm.add_constant(train_data[['stock_2020']]) # 添加截距项 y_train = train_data['stock_2021'] model01 = sm.OLS(y_train, X_train).fit() # 拟合普通最小二乘回归模型 # 3. 预测待填充数据的stock_2021值 X_fill = sm.add_constant(fill_data[['stock_2020']]) fill_preds = model01.predict(X_fill) # 4. 将预测值填充回原DataFrame df_atom.loc[df_atom['stock_2021'].isna(), 'stock_2021'] = fill_preds
额外注意事项
- 如果
stock_2020本身存在缺失值,需先处理(如删除行或用均值填充),否则训练和预测会出现NaN - 可通过
model01.summary()查看模型拟合效果,判断用stock_2020预测stock_2021的合理性 - 若需多特征预测,只需将
['stock_2020']改为多特征列表,如['stock_2020', 'stock_2019']
内容的提问来源于stack exchange,提问作者Revolucion for Monica
相关产品推荐
相关产品推荐

