我不久之前开始编写代码,然后从Kaggle跳入Titanic练习。我试图将某些乘客的年龄的Nan值更改为我认为适合其前缀的年龄(先生,女士,主人...)。
试图做一个for循环,但似乎不起作用,因为它给Age中Nan值的每个人都赋予相同的值,而不管其前缀如何。我在做什么错,我该怎么做呢?
import math
for i in range(len(database)):
if math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Capt.' or database['Prefix'][i] == ' Col.':
database['Age'] = 65.0
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Sir.' or database['Prefix'][i] == ' Major.' or database['Prefix'][i] == ' Rev.' or database['Prefix'][i] == ' Lady.' or database['Prefix'][i] == ' Dr.':
database['Age'] = 47.5
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Don.' or database['Prefix'][i] == ' Jonkheer.' or database['Prefix'][i] == ' Mrs.' or database['Prefix'][i] == ' the Countess.':
database['Age'] = 36.5
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Mr.' or database['Prefix'][i] == ' Ms.':
database['Age'] = 29.0
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Mme.' or database['Prefix'][i] == ' Mlle.':
database['Age'] = 24.0
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Miss.':
database['Age'] = 21.0
elif math.isnan(database['Age'][i]) == True and database['Prefix'][i] == ' Master.':
database['Age'] = 3.5
这是在for循环之前:Titanic1.py这是在for循环之后:Titanic2.py
非常感谢!!
关于您的代码,可以修复一些问题。
首先,我们将所有if / elifs的common元素放在一个if中:
import math
for i in range(len(database)):
if math.isnan(database['Age'][i]) == True:
if database['Prefix'][i] == ' Capt.' or database['Prefix'][i] == ' Col.':
database['Age'] = 65.0
elif database['Prefix'][i] == ' Sir.' or database['Prefix'][i] == ' Major.' or database['Prefix'][i] == ' Rev.' or database['Prefix'][i] == ' Lady.' or database['Prefix'][i] == ' Dr.':
database['Age'] = 47.5
elif database['Prefix'][i] == ' Don.' or database['Prefix'][i] == ' Jonkheer.' or database['Prefix'][i] == ' Mrs.' or database['Prefix'][i] == ' the Countess.':
database['Age'] = 36.5
elif database['Prefix'][i] == ' Mr.' or database['Prefix'][i] == ' Ms.':
database['Age'] = 29.0
elif database['Prefix'][i] == ' Mme.' or database['Prefix'][i] == ' Mlle.':
database['Age'] = 24.0
elif database['Prefix'][i] == ' Miss.':
database['Age'] = 21.0
elif database['Prefix'][i] == ' Master.':
database['Age'] = 3.5
然后,通过将其database["Prefix"][i]
保存到变量中来摆脱所有检查,并使用in
运算符来避免很多检查prefix == "something" or prefix == "something else"
。
for i in range(len(database)):
if math.isnan(database['Age'][i]) == True:
prefix = database['Prefix'][i]
if prefix in (' Capt.', ' Col.'):
database['Age'] = 65.0
elif prefix in (' Sir.', ' Major.', ' Rev.', ' Lady.', ' Dr.'):
database['Age'] = 47.5
elif prefix in (' Don.', ' Jonkheer.', ' Mrs.', ' the Countess.'):
database['Age'] = 36.5
elif prefix (' Mr.', ' Ms.'):
database['Age'] = 29.0
elif prefix (' Mme.', ' Mlle.'):
database['Age'] = 24.0
elif prefix == ' Miss.':
database['Age'] = 21.0
elif prefix == ' Master.':
database['Age'] = 3.5
然后,请注意,您在此处进行修改,database["Age"]
而不是在此处进行修改,database["Age"][i]
因此我们也将对其进行修复。
for i in range(len(database)):
if math.isnan(database['Age'][i]) == True:
prefix = database['Prefix'][i]
if prefix in (' Capt.', ' Col.'): age = 65.0
elif prefix in (' Sir.', ' Major.', ' Rev.', ' Lady.', ' Dr.'): age = 47.5
elif prefix in (' Don.', ' Jonkheer.', ' Mrs.', ' the Countess.'): age = 36.5
elif prefix (' Mr.', ' Ms.'): age = 29.0
elif prefix (' Mme.', ' Mlle.'): age = 24.0
elif prefix == ' Miss.': age = 21.0
elif prefix == ' Master.': age = 3.5
database['Age'][i] = age
最后,如果您愿意,可以编写一个字典,将前缀与年龄匹配,并使用它来避免很多if和elifs。
# Define how an age is matched with some prefixes.
ages_and_prefixes = ((65.0, ("Capt", "Col")),
(47.5, ("Sir", "Major", "Rev", "Lady", "Dr")),
(36.5, ("Don", "Jonkheer", "Mrs", "the Countess")),
(29.0, ("Mr", "Ms")),
(24.0, ("Mme", "Mlle")),
(21.0, ("Miss",)),
(3.5, ("Master",))
)
prefix_to_age_dict = {}
for data in ages_and_prefixes:
age = data[0]
prefixes = data[1]
for prefix in prefixes:
prefix_to_age_dict[prefix] = age
# The replacement step in the database is now much simpler.
for i in range(len(database)):
if math.isnan(database['Age'][i]):
prefix = " " + database['Prefix'][i] + "."
age = prefix_to_age_dict[prefix]
database['Age'][i] = age
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句