Pandas如何检查字符串中的每个单词是否存在于指定列表中
遍历拆分后艺人姓名列表的实现方案
你已经通过df["artist_name"].str.split()得到了每一行对应单词列表的Series,直接用apply方法对每个列表做遍历判断即可,示例如下:
# 提前定义好的常见姓名集合,示例:common_name_set = {"周杰伦", "李", "明", "Taylor", "Swift"} # 需求:判断姓名所有单词都在集合内才判定为真实姓名 df["is_real_name"] = df["artist_name"].str.split().apply( lambda name_parts: all(part in common_name_set for part in name_parts) )
apply会自动遍历每一行拆分得到的单词列表,lambda内的生成器会逐个校验单词是否属于预设集合:
- 用
all()表示所有单词都匹配时才返回True,适合要求姓名的姓氏、名字全部属于常见姓名的判断场景 - 替换为
any()表示只要有一个单词匹配就返回True,适合只要求姓氏/名字其中一项匹配的场景
如果存在大小写不匹配的问题,统一格式后再判断即可:
# 先把集合内所有元素转成小写 common_name_set = {x.lower() for x in common_name_set} # 判断时统一转小写匹配 df["is_real_name"] = df["artist_name"].str.split().apply( lambda name_parts: all(part.lower() in common_name_set for part in name_parts) )
如果需要提取所有匹配的单词,而非仅返回布尔值:
df["matched_parts"] = df["artist_name"].str.split().apply( lambda name_parts: [part for part in name_parts if part in common_name_set] )
- 提前清洗姓名中的特殊符号、后缀(如Jr.、III、点、多余空格),避免无效内容导致匹配失败
- 百万级以上的数据集可以把列表遍历逻辑换成生成器,进一步降低内存占用
内容的提问来源于stack exchange,提问作者Oscar Sykes
相关产品推荐
相关产品推荐

