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

使用pandas.str.split提取泰坦尼克号数据集头衔出现重复序列问题

这个问题我之前处理泰坦尼克号数据集时也碰到过,核心是提取的头衔藏了前导空格,再加上split方法的小细节没处理好,咱们一步步解决:

先搞懂问题出在哪

你用str.split('[,.]')提取的头衔,看起来显示是Mr,但实际是带前导空格的字符串(比如' Mr')——不信你可以打印data.Title.str.len()看看,正常Mr长度是2,带空格的版本长度是3。这就是为什么data.Title == 'Mr'会全返回False,因为字符串实际不相等;而索引单行出现重复,大概率是原Series处理时没对齐索引,加上空格问题放大了异常。

解决方案一:给提取的结果做空格清理

直接在提取后加上str.strip(),把前后的空格都去掉:

# 重新提取并清理空格
data['Title'] = data.Name.str.split('[,.]').str.get(1).str.strip()

执行完这段代码后,你再试:

  • data.Title[0]会返回单纯的'Mr',不会有重复索引
  • data.Title == 'Mr'能正常返回True/False,过滤数据集也能正常工作

解决方案二:用正则直接提取(更推荐)

比起split后再处理空格,用正则表达式直接匹配头衔更精准,一步到位:

data['Title'] = data.Name.str.extract(r',\s*(\w+)', expand=False)

这个正则的逻辑是:匹配姓名里的逗号,,跳过逗号后面任意数量的空白字符\s*,然后直接捕获后面的单词(\w+)——也就是我们要的头衔,完全不需要额外处理空格。

验证效果

做完上面的操作后,你可以做几个简单验证:

  • 查看单行值:print(data.Title[0]),输出应该是Mr
  • 筛选验证:data[data.Title == 'Mr'],能正常筛选出头衔为Mr的所有行
  • 查看唯一值:print(data.Title.unique()),会得到干净的头衔列表,比如['Mr', 'Mrs', 'Miss', 'Master', 'Dr']这类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:24