用熊猫上的groupby对象填充缺失值-泰坦尼克号数据集

问题描述 投票:0回答:1

我已经看过类似的问题,但是没有一个是我的答案,或者我没有看到/理解。我是ML的新手,并且尝试在Kaggle上发现具有已知数据集的Numpy,熊猫。目前,我在Titanic数据集上。我有2个不同的数据集:训练和测试。我必须在训练和测试数据集的“年龄”列上填写缺失的值。我的标准是我使用火车数据集创建的分组对象。我将“性别”,“ Pclass”和“标题”分组(来自每个乘客姓名的标题)。

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值,该年龄应该是Age = 30。

填充前:

train["Age"].isna().sum()

输出为:

177

我尝试过:

train["Age"] = train["Age"].fillna(grouped["Age"].transform("median"))

它完美地填充了火车上的NaN值。

填充后:

train["Age"].isna().sum()

输出为:

0

但是当我将其应用于测试数据集时,它什么也没有改变,也没有给出任何错误。填充之前:

test["Age"].isna().sum()

输出为:

86

然后将函数与在火车数据集上创建的组对象一起应用:

test["Age"] = test["Age"].fillna(grouped["Age"].transform("median"))
test["Age"].isna().sum()

输出为:

86

NaN值仍然存在于测试数据集上。我应该如何应用此函数来更改使用训练数据集创建的分组对象的测试数据集上的NaN值?

python pandas
1个回答
0
投票

我们想填写丢失的年龄数据,而不仅仅是删除丢失的年龄数据行。一种方法是填写所有乘客的平均年龄(输入)。检查乘客等级的平均年龄。例如:

    def impute_age(cols):
        Age = cols[0]
        Pclass = cols[1]

        if pd.isnull(Age):

            if Pclass == 1:
                return 37

            elif Pclass == 2:
                return 29

            else:
                return 24

        else:
            return Age
    train['Age'] = train[['Age','Pclass']].apply(impute_age,axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.