所以我在python中有一个IF语句,该语句本质上是根据其他两列将数据集中的空值更改为平均值。
procadmin
所以在这里,我尝试使用某些旅客舱位中男性/女性的平均年龄来填写nans。我觉得会有一种更好的编写方法,特别是如果我要遇到更大的数据集时。
供参考,%
df是包含所有数据的主df。由于某些原因,我无法使此代码与使用def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
Sex = cols[2]
if pd.isnull(Age):
if Pclass == 1 and Sex == 0:
return train.loc[(train["Pclass"] == 1)
& (train["Sex_male"] == 0)]["Age"].mean()
if Pclass == 2 and Sex == 0:
return train.loc[(train["Pclass"] == 2)
& (train["Sex_male"] == 0)]["Age"].mean()
if Pclass == 3 and Sex == 0:
return train.loc[(train["Pclass"] == 3)
& (train["Sex_male"] == 0)]["Age"].mean()
if Pclass == 1 and Sex == 1:
return train.loc[(train["Pclass"] == 1)
& (train["Sex_male"] == 1)]["Age"].mean()
if Pclass == 2 and Sex == 1:
return train.loc[(train["Pclass"] == 2)
& (train["Sex_male"] == 1)]["Age"].mean()
if Pclass == 3 and Sex == 1:
return train.loc[(train["Pclass"] == 3)
& (train["Sex_male"] == 1)]["Age"].mean()
else:
return Age
参数传递的一部分火车配合使用。
本质上,这里的问题是:如果我的数据集大得多,我怎么能以一种更简单的方式编写它?有没有办法写这个IF语句?
答案 0 :(得分:9)
在我看来,您需要做的就是参数化内部if
:
if pd.isnull(Age):
return train.loc[(train["Pclass"] == Pclass)
& (train["Sex_male"] == Sex)]["Age"].mean()
答案 1 :(得分:0)
PCLASS_VALUES = [
[],
]
SEX_VALUES = [
[],
]
return train.loc[(train["Pclass"] == PCLASS_VALUES[Pclass][Sex]) & (train["Sex_male"] == SEX_VALUES[Pclass][Sex])]["Age"].mean()