如何在Pandas中提取名字长度≥4的人员姓氏?求代码优化
问题分析
原代码的错误出在最后一行的判断逻辑:data['FirstName'] in data['NewFirstName']试图将整个Series对象用于in判断,而Series是不可哈希的类型,因此抛出TypeError。此外代码还存在逻辑错误——把拆分后的名字列当成姓氏列赋值给LastName,完全搞反了对应关系。
简洁解决方案
用Pandas的矢量化字符串操作可以高效完成需求,避免低效的apply和错误逻辑:
import pandas as pd # 读取数据 data = pd.read_csv("Data.csv") # 按第一个空格拆分姓名,生成名字和姓氏列(n=1避免名字含空格时拆分错误) data[["FirstName", "LastName"]] = data["EmployeeName"].str.split(n=1, expand=True) # 给名字长度不足4的行清空姓氏列 data.loc[data["FirstName"].str.len() < 4, "LastName"] = None # 提取符合条件的记录(可选) derived_name = data.dropna(subset=["LastName"])
关键优化点
- 用
str.split(n=1, expand=True)一次性拆分并生成两列,无需单独分步赋值 - 用矢量化的
str.len()和loc索引替代apply,执行效率更高 - 直接通过条件索引控制姓氏列的赋值,逻辑清晰无歧义
内容的提问来源于stack exchange,提问作者Bumze
相关产品推荐
相关产品推荐

