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
相关产品推荐
相关产品推荐

