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

Pandas如何筛选指定列文本单词数大于3的所有DataFrame行

错误根因

你原先的代码运行报错核心是索引逻辑使用错误:
len(df.answer) 计算的是answer这个Series对象本身的元素总数,也就是整个DataFrame的总行数(本示例中为7),根本没有逐行计算每个单元格内文本的单词数量。此时len(df.answer) > 3 运算得到的是单个布尔标量True,拿这个标量做DataFrame索引时,pandas会尝试把它当列名查询,找不到对应列就抛出KeyError: True。

正确实现方式

核心思路是先生成逐行匹配的布尔掩码,也就是对每一行的answer文本单独计算单词数,和阈值3比较得到True/False的序列,再用这个序列筛选符合条件的行。

  • 推荐用向量化字符串方法实现,性能最优,不需要写循环:
# 1. 按空白拆分每个单元格的文本,计算拆分后的元素个数,生成布尔掩码
mask = df['answer'].str.split().str.len() > 3
# 2. 用掩码筛选数据
result_df = df[mask]
  • 如果后续需要自定义更复杂的单词计数规则(比如过滤特殊符号、停用词等),可以用apply方法逐行处理:
def count_words(text):
    # 可在此处扩展自定义计数逻辑
    return len(text.split())

mask = df['answer'].apply(count_words) > 3
result_df = df[mask]
结果匹配说明

上述代码运行后筛选出的answer列值,和你列出的目标行完全一致:

  • 'hello how are you doing'(拆分后共5个词)
  • 'bye bye bye bye'(拆分后共4个词)
  • 'Who let the dogs out'(拆分后共4个词)
  • '1 + 1 + 1 + 2'(拆分后共7个元素)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:06:03