【发布时间】:2019-11-20 01:15:46
【问题描述】:
很抱歉提出 n00b 问题。
我是 Kaggle 的新手,已经开始查看他们的一些比赛,其中一个初学者是关于著名的泰坦尼克号数据的。我的问题是关于在 Age 列中填写 NaN。我想做的是对于 Age 列中的每个 NaN,我想将其替换为该 Class 和 Sex 的平均年龄。
例如,passengerID 6 是 3rd class 的 Man,他的年龄为 NaN。我想要的是用三等男性的平均年龄替换那个 NaN。这是 26.5。
到目前为止我尝试过的如下:
man_1 = train[(train['male'] == 1) & (train['Pclass'] == 1)]['Age'].mean()
train[(train['male'] == 1) & (train['Pclass'] == 1)]['Age'].fillna(man_1, inplace=True)
man_2 = train[(train['male'] == 1) & (train['Pclass'] == 2)]['Age'].mean()
train[(train['male'] == 1) & (train['Pclass'] == 2)]['Age'].fillna(man_2, inplace=True)
man_3 = train[(train['male'] == 1) & (train['Pclass'] == 3)]['Age'].mean()
train[(train['male'] == 1) & (train['Pclass'] == 3)]['Age'].fillna(man_3, inplace=True)
wom_1 = train[(train['male'] == 0) & (train['Pclass'] == 1)]['Age'].mean()
train[(train['male'] == 0) & (train['Pclass'] == 1)]['Age'].fillna(wom_1, inplace=True)
wom_2 = train[(train['male'] == 0) & (train['Pclass'] == 2)]['Age'].mean()
train[(train['male'] == 0) & (train['Pclass'] == 2)]['Age'].fillna(wom_2, inplace=True)
wom_3 = train[(train['male'] == 0) & (train['Pclass'] == 3)]['Age'].mean()
train[(train['male'] == 0) & (train['Pclass'] == 3)]['Age'].fillna(wom_3, inplace=True)
而且 quelle 惊喜它不起作用。我不确定为什么?首先,如果有人能提出为什么它不起作用,那就太好了。其次,我觉得应该有一种更“Pythonistic”的方式来做到这一点,但我不确定具体如何。我知道 Stack 上还有另一个可能重复的主题,但它并不能完全解释为什么我的代码不起作用,如果这篇文章惹恼了人们,很抱歉。干杯
【问题讨论】:
-
'Pythonistic' >> pythonic ;)
-
如果你使用 '.loc' 会怎样?
train.loc[(train['male'] == 1) & (train['Pclass'] == 1),'Age'].fillna(man_1, inplace=True) -
NaN 仍然存在 :(