如何在Pandas中结合str.contains()用条件语句提取名字到新列
解决方法:提取包含特定关键词的行中的名字
嘿,这个需求很清晰,我给你两种实用的实现方式,都是用Pandas自带的字符串处理工具,直接就能跑通:
首先先构造你给出的示例DataFrame,方便测试:
import pandas as pd data = {'A': ['John has a Baseball', 'Amy has a Basketball', 'Sarah has a Tennis Racket', 'Alex has a Football']} df = pd.DataFrame(data)
方法1:用布尔掩码定位后提取
这种方法逻辑清晰,先标记出符合条件的行,再针对性提取名字:
# 先初始化新列为缺失值(可选,也可以直接赋值) df['Name'] = pd.NA # 创建布尔掩码:找出A列包含"Ball"的行 mask = df['A'].str.contains('Ball', case=False) # case=False可以忽略大小写,按需开启 # 只给符合条件的行赋值Name列,提取开头的名字(正则匹配第一个单词) df.loc[mask, 'Name'] = df.loc[mask, 'A'].str.extract(r'^(\w+)', expand=False)
方法2:用np.where一行搞定(更简洁)
如果喜欢简洁的写法,可以用np.where实现条件赋值:
import numpy as np df['Name'] = np.where( df['A'].str.contains('Ball'), # 判断条件 df['A'].str.extract(r'^(\w+)', expand=False), # 满足条件时提取名字 pd.NA # 不满足时设为缺失值 )
结果说明
运行完任意一种方法后,你的DataFrame会变成这样:
| A | Name |
|---|---|
| John has a Baseball | John |
| Amy has a Basketball | Amy |
| Sarah has a Tennis Racket | |
| Alex has a Football | Alex |
完全符合你要的:只有包含"Ball"的行提取出对应的名字(John、Amy、Alex),不满足条件的行Name列为缺失值。
正则说明
这里用的正则^(\w+)是匹配字符串开头的第一个单词,正好对应你的示例中名字的位置。如果你的名字格式有变化(比如带空格或特殊字符),可以调整正则表达式,但当前示例下这个正则完全够用。
内容的提问来源于stack exchange,提问作者fashioncoder
相关产品推荐
相关产品推荐

