You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas使用正则提取姓名列头衔生成新列全返回Other如何解决

错误原因
  • 正则捕获与取值错误:正则\s([A-Za-z]+)\.的捕获组仅匹配头衔的字母部分(比如捕获结果是Mr而非Mr.),且groups()方法返回的是元组类型,不是字符串,无法和后续判断条件匹配
  • 判断条件格式错误:所有条件中的头衔都额外加了.后缀,和实际捕获到的无点字符串完全不匹配,导致所有请求都进入Other分支
  • 冗余代码无效:末尾的dict_title是数字到分类的映射,但是search_title返回的已经是分类字符串,该替换逻辑无任何实际作用
修复后可正常运行的代码
import os
import pandas as pd
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.group(1)
            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'
        return 'Other'

    return data[colname].apply(search_title)

data['Title'] = create_title_column(data, 'Name')
print(data.head(10))
更简洁的实现方案

直接使用pandas内置的字符串方法 + 映射字典实现,无需自定义多层函数,可读性更高:

import os
import pandas as pd

filename = os.path.join(os.path.dirname(__file__),'train.csv')
data = pd.read_csv(filename)

# 构建头衔到分类的映射字典
title_map = {
    'Rev': 'Clerical',
    'Master': 'Scholar',
    'Dr': 'Doctor',
    'Major': 'Military', 'Col': 'Military', 'Capt': 'Military',
    'Mr': 'Commoner', 'Mrs': 'Commoner', 'Ms': 'Commoner', 'Miss': 'Commoner',
    'Don': 'Nobility', 'Sir': 'Nobility', 'Mme': 'Nobility', 'Mlle': 'Nobility', 'Lady': 'Nobility', 'Countess': 'Nobility', 'Jonkheer': 'Nobility'
}

# 一步提取头衔+映射分类,未匹配到的默认返回Other
data['Title'] = data['Name'].str.extract('\s([A-Za-z]+)\.', expand=False).map(title_map).fillna('Other')
print(data.head(10))

内容的提问来源于stack exchange,提问作者Robin Sage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:36:03