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

如何在Pandas中非迭代地从泰坦尼克号数据集姓名列提取头衔

如何在Pandas中非迭代地从泰坦尼克号数据集姓名列提取头衔

嘿,我太懂你不想写迭代循环的心情了——Pandas里本来就有更简洁的向量化方法来搞定这个,完全不用手动写for循环!

你之前尝试直接用Series作为切片索引失败,是因为Pandas的str切片不支持传入Series作为起始/结束位置,得用专门的字符串处理工具来实现。给你推荐几个好用的非迭代方案:

方法一:用str.extract(最推荐,简洁又准确)

这是处理这类提取需求的标准做法,利用正则表达式精准捕获头衔部分:

df['Title'] = df['Name'].str.extract(r' ([A-Za-z]+)\.', expand=False)

解释下这个正则:

  • :匹配姓名里的空格(确保我们抓的是空格后的内容)
  • ([A-Za-z]+):捕获连续的字母,也就是我们要的头衔(比如Mr、Mrs、Miss这些)
  • \.:匹配头衔后面的点号,用来精准定位头衔的结束位置
    extract会自动把捕获到的内容提取成新列,完美符合你的需求,而且全程是Pandas的向量化操作,效率比迭代高多了。

方法二:用str.split结合str.replace

如果对正则不太熟,也可以用字符串分割的方式:

# 先按空格分割字符串,取第二部分(也就是带点的头衔),再把点号去掉
df['Title'] = df['Name'].str.split().str[1].str.replace('.', '', regex=False)

不过这个方法要注意,如果姓名里有中间带空格的特殊情况(比如某些长头衔),可能会出问题,所以还是更推荐第一种str.extract的方式。

对比你之前写的迭代代码,上面这两种方法不仅代码更短,而且在数据量大的时候性能会好很多——毕竟Pandas的向量化操作是底层优化过的,比手动循环高效太多。

备注:内容来源于stack exchange,提问作者Martin Beraldo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:23:04