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

Pandas如何筛选DataFrame中Text列仅含Apple或Orange且无其他词的行

实现方案

核心判断逻辑:Text列的每条文本按空格拆分后,所有拆分出的词汇必须仅属于Apple、Orange两个允许值,存在任意其他词汇的行直接过滤。

代码实现

首先构造示例测试数据:

import pandas as pd

# 构建示例DataFrame
df = pd.DataFrame({
    "Column1": list(range(1,7)),
    "Column2": list("abcdef"),
    "Text": [
        "Apple Orange Car",
        "Apple Tree",
        "Apple Orange",
        "Sun Orange",
        "Orange",
        "Apple Orange Apple"
    ]
})

方法1:通用分词校验(逻辑直观易修改)

适合后续允许词列表可能调整、需要灵活扩展的场景:

# 定义允许出现的词汇集合
allowed = {"Apple", "Orange"}
# 筛选:拆分文本后校验所有词都在允许列表中
res_df = df[df["Text"].apply(lambda x: all(word in allowed for word in x.split()))]

方法2:正则匹配(性能更优,适合大数据量)

直接通过正则整串匹配,不需要逐词循环判断,数据量较大时运行速度更快:

# 正则规则:整行文本从开头到结尾,仅由Apple/Orange和分隔空格组成
res_df = df[df["Text"].str.fullmatch(r"(?:Apple|Orange)(?:\s(?:Apple|Orange))*")]

结果验证

执行上述任意一种方法后,返回的res_df中Text列取值正好为Apple Orange、Orange、Apple Orange Apple,共3条记录,完全符合筛选预期。

如果你的文本存在首尾多余空格、连续多空格、大小写不统一的情况,可以在筛选前先加一步文本清洗,比如df["Text"] = df["Text"].str.strip().str.replace(r"\s+", " ", regex=True)处理空格问题,再统一大小写即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:00:54