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

如何在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会变成这样:

AName
John has a BaseballJohn
Amy has a BasketballAmy
Sarah has a Tennis Racket
Alex has a FootballAlex

完全符合你要的:只有包含"Ball"的行提取出对应的名字(John、Amy、Alex),不满足条件的行Name列为缺失值。

正则说明

这里用的正则^(\w+)是匹配字符串开头的第一个单词,正好对应你的示例中名字的位置。如果你的名字格式有变化(比如带空格或特殊字符),可以调整正则表达式,但当前示例下这个正则完全够用。

内容的提问来源于stack exchange,提问作者fashioncoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:44:53