基于前缀过滤的Python正则表达式:泰坦尼克号Kaggle数据集处理问询
从泰坦尼克号姓名列提取称谓前缀的正则方法
嘿,我完全懂你说的正则反直觉的感觉——不过针对泰坦尼克号数据集的姓名格式,提取称谓前缀其实非常适合用正则来搞定!咱们一步步来:
首先看你的姓名样本格式:
0 Braund, Mr. Owen Harris
1 Cumings, Mrs. John Bradley (Florence Briggs Th...
2 Heikkinen, Miss. Laina
3 Futrelle, Mrs. Jacques Heath (Lily May Peel)
4 Allen, Mr. William Henry
所有姓名都是**「姓氏, 称谓. 名字(可能带括号备注)」**的结构,核心是要把逗号和点号之间的称谓(比如Mr、Mrs、Miss)提取出来。
核心实现代码
用Pandas的str.extract()方法搭配正则表达式,直接提取目标内容到新列:
# 提取称谓到新列Title df_train['Title'] = df_train['Name'].str.extract(r',\s*([A-Za-z]+)\.', expand=False)
正则表达式解释
咱们拆解一下r',\s*([A-Za-z]+)\.':
,\s*:匹配姓名里的逗号,以及逗号后面的零个或多个空格(处理可能的空格不一致情况)([A-Za-z]+):捕获组,匹配一个或多个大小写字母——这就是我们要的称谓前缀\.:匹配称谓后面的点号,确保我们只提取到点号前的部分
验证结果
运行完上面的代码后,你可以查看新列:
print(df_train[['Name', 'Title']].head())
输出会是:
Name Title 0 Braund, Mr. Owen Harris Mr 1 Cumings, Mrs. John Bradley (Florence Briggs Th... Mrs 2 Heikkinen, Miss. Laina Miss 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) Mrs 4 Allen, Mr. William Henry Mr
进阶:过滤特定前缀
如果只想保留常见的称谓(比如Mr/Mrs/Miss/Master等),可以后续做过滤:
# 定义有效称谓列表 valid_titles = ['Mr', 'Mrs', 'Miss', 'Master', 'Dr', 'Rev'] # 提取后替换非有效称谓为Other df_train['Title'] = df_train['Name'].str.extract(r',\s*([A-Za-z]+)\.', expand=False) df_train['Title'] = df_train['Title'].apply(lambda x: x if x in valid_titles else 'Other')
这样就能把一些少见的称谓(比如Lady、Sir、Capt等)统一标记为Other,方便后续分析。
内容的提问来源于stack exchange,提问作者Sam B.
相关产品推荐
相关产品推荐

