我已经看到过类似的问题,但没有一个是我的答案,或者我没有看到/理解。我是ML的新手,试图在Kaggle上发现拥有已知数据集的numpy熊猫。目前,我在泰坦尼克号数据集上。我有两个不同的数据集:训练和测试。我必须在列车和测试数据集的“年龄”列中填写缺失的值。我的条件是使用train dataset创建的分组对象。我用“性别”、“等级”和“头衔”(来自每个乘客姓名的头衔)进行分组
grouped = train.groupby(["Sex","Title","Pclass"])
grouped_m = grouped.median()
grouped_m = grouped_m.reset_index()[["Sex","Title","Pclass", "Age"]]
输出为:
Sex Title Pclass Age
0 female Miss 1 30.0
1 female Miss 2 24.0
2 female Miss 3 18.0
3 female Mrs 1 40.0
4 female Mrs 2 32.0
5 female Mrs 3 31.0
6 female Officer 1 49.0
7 female Royalty 1 40.5
8 male Master 1 4.0
9 male Master 2 1.0
10 male Master 3 4.0
11 male Mr 1 40.0
12 male Mr 2 31.0
13 male Mr 3 26.0
14 male Officer 1 51.0
15 male Officer 2 46.5
16 male Royalty 1 40.0
这是我在“测试”数据集的“年龄”列上应用的标准。例如:当测试数据集上的一行性别=女性、标题=未命中、Pclass=1、年龄=NaN时,NaN值必须用上述输出填充,输出值应为年龄=30
填写前:
train["Age"].isna().sum()
输出为:
177
我试过这个:
train["Age"] = train["Age"].fillna(grouped["Age"].transform("median"))
它完美地填补了火车上的价值观
填充后:
train["Age"].isna().sum()
输出为:
0
但当我将其应用于测试数据集时,它根本没有改变任何内容,也没有给出任何错误。 填写前:
test["Age"].isna().sum()
输出为:
86
然后,我对我在train dataset上创建的group object应用函数:
test["Age"] = test["Age"].fillna(grouped["Age"].transform("median"))
test["Age"].isna().sum()
输出为:
86
NaN值仍然存在于测试数据集上。我应该如何应用此函数来更改使用train dataset创建的分组对象的测试数据集上的NaN值
我们希望填充缺失的年龄数据,而不是仅仅删除缺失的年龄数据行。一种方法是填写所有乘客的平均年龄(插补)。 按乘客等级检查平均年龄。例如:
编辑: 正如@ALollz所建议的那样,我使用DataFrame.merge()方法合并了数据,显然是可行的。代码如下:
谢谢大家
相关问题 更多 >
编程相关推荐