如何在Python函数中提取DataFrame姓名列的头衔并新增列?
解决DataFrame提取头衔的问题
错误原因分析
- 正则表达式错误:你写的
".$"只会匹配字符串的最后一个字符,完全不符合提取头衔的需求。 - 循环赋值逻辑错误:遍历
input_df["Name"]得到的是每个名字的字符串值,用这个字符串作为Title的索引赋值,会直接触发TypeError,这不是pandas的正确操作方式。
正确解决方案
方法一:用pandas字符串提取(推荐,高效简洁)
pandas的str.extract专门用于从字符串列提取匹配内容,直接生成新列:
import pandas as pd import re # 给原DataFrame添加Title列 input_df['Title'] = input_df['Name'].str.extract(r',\s*([A-Za-z]+\.)')
方法二:用apply配合正则匹配
如果需要自定义逻辑,也可以用apply调用函数处理:
import pandas as pd import re def get_title(name): # 匹配逗号后、空格(可选)开头的头衔(字母+点) match_result = re.search(r',\s*([A-Za-z]+\.)', name) # 匹配到就返回捕获的头衔,否则返回None return match_result.group(1) if match_result else None input_df['Title'] = input_df['Name'].apply(get_title)
正则表达式说明
r',\s*([A-Za-z]+\.)'的含义:
,:匹配名字里的逗号(比如"Myles, Mr...."里的逗号)\s*:匹配0个或多个空格(兼容名字里逗号后可能有多个空格的情况)([A-Za-z]+\.):捕获组,匹配1个以上字母加一个点,正好对应Mr.、Mrs.、Dr.这类头衔
内容的提问来源于stack exchange,提问作者Noumenax
相关产品推荐
相关产品推荐

