【发布时间】:2021-10-02 10:26:23
【问题描述】:
我正在使用 Titanic 数据集来学习如何清理数据。我现在要做的是创建一个新列,其中包含 Name 列中的标题(先生、夫人、博士等),并根据社会阶层对它们进行分组:
Dr. – Doctor
Rev. – Clerical
Master. – Scholar
Major., Col., Capt. – Military
Mr., Mrs., Ms., Miss. – Commoners
Don., Sir., Mme., Mlle., Lady., Countess., Jonkheer. – Nobility
我创建了一个函数,除了所有值都返回“Other”之外,它大部分都可以工作。
import os
import re
filename = os.path.join(os.path.dirname(__file__),'train.csv')
data = pd.read_csv(filename)
def create_title_column(data, colname):
def search_title(x):
title_search = re.search('\s([A-Za-z]+)\.', x)
if title_search:
title = title_search.groups(0)
if title == 'Rev.':
return 'Clerical'
elif title == 'Master.':
return 'Scholar'
elif title == 'Dr.':
return 'Doctor'
elif title in ['Major.', 'Col.', 'Capt.']:
return 'Military'
elif title in ['Mr.','Mrs.','Ms.','Miss.']:
return 'Commoner'
elif title in ['Don.','Sir.','Mme.','Mlle.','Lady.','Countess.','Jonkheer.']:
return 'Nobility'
else:
return 'Other'
return_titles = data[colname].apply(search_title)
dict_title = {1: 'Clerical', 2:'Scholar', 3:'Doctor', 4:'Military',5:'Commoner',6:'Nobility'}
return return_titles.replace(dict_title)
data['Title'] = create_title_column(data, 'Name')
print(data.head(10))
我不知道我做错了什么。此外,如果您知道更好、更简洁的方法,欢迎您向我展示。任何帮助都会很棒,所以提前感谢您的宝贵时间。
您可以在此处下载泰坦尼克号数据集: https://www.kaggle.com/hesh97/titanicdataset-traincsv
【问题讨论】:
-
您包含前导空格。
-
嘿@garagnoth,感谢您的参与。我添加了 re.search('\s[A-Za-z]+\.', x),但它仍然无法正常工作跨度>
-
我在下面提供了我的版本。你需要这样做
title_search.groups(0).strip()