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

如何用简单线性回归模型填充泰坦尼克号数据集的缺失年龄值?

用线性回归预测值填充泰坦尼克号数据集的缺失年龄

咱们先拆解你遇到的两个问题的根源,再一步步给出修正方案:

问题1:DataFrame无法直接作为fillna的value参数

你用pd.DataFrame(linreg.predict(test_data))生成的age是一个DataFrame,但fillna的value参数只接受标量、字典或Series类型,直接传入DataFrame自然会触发类型错误。解决这个问题的核心是把预测结果转换成与原数据索引匹配的Series。

问题2:apply方法缺少必要的函数参数

第二个错误是因为你调用apply()时没有传入要执行的具体函数,这种写法本身就不符合apply的使用逻辑——咱们根本不需要用apply来做填充操作,直接用预测值Series匹配缺失位置即可。


修正后的完整代码

import pandas as pd
from sklearn.linear_model import LinearRegression

# 初始化线性回归模型
linreg = LinearRegression()

# 读取数据集(Windows路径建议用原始字符串避免转义问题)
data = pd.read_csv(r'C:\Users\ryans\seaborn-data\titanic.csv')

# 选择用于预测年龄的特征与目标列
data_with_null = data[['survived','pclass','sibsp','parch','fare','age']]

# 筛选无缺失值的样本作为训练集
data_without_null = data_with_null.dropna()

# 拆分训练集的特征与目标变量
train_data_x = data_without_null.iloc[:,:5]
train_data_y = data_without_null.iloc[:,5]

# 拟合线性回归模型
linreg.fit(train_data_x, train_data_y)

# 生成与原数据索引匹配的预测年龄Series(关键修正)
predicted_age = pd.Series(
    linreg.predict(data_with_null.iloc[:,:5]),
    index=data_with_null.index
)

# 用预测值填充age列的缺失值
data_with_null['age'] = data_with_null['age'].fillna(predicted_age)

# 验证空值是否已填充完成
print(data_with_null.apply(lambda x: sum(x.isnull()), axis=0))

关键细节说明

  1. 路径处理:Windows系统下的文件路径建议加r使用原始字符串,避免斜杠转义带来的读取错误。
  2. 索引匹配:将预测结果转为Series并指定与原数据一致的索引,能确保填充时预测值和对应行精准匹配,不会出现错位。
  3. 填充逻辑:fillna(predicted_age)会自动识别age列的缺失位置,仅用对应索引的预测值填充,无需手动筛选缺失行。

这样修改后,就能顺利用线性回归的预测结果完成缺失年龄的插补了。

内容的提问来源于stack exchange,提问作者ASH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:22:43