从DataFrame字符串中移除指定词汇但保留全由该词汇组成的行
解决方案
修正后的代码
import pandas as pd # 原数据 data = {'strings_variable': ['Avalon Toyota loan', 'Blazer Chevrolet', 'Suzuki Vitara sales', 'Vauxhall Astra', 'Buick Special car', 'Ford Aerostar', 'car refund', 'car loan']} df = pd.DataFrame(data) # 待移除词汇集合(转集合提升查找效率) words_to_remove = {'car','sales','loan','refund'} def process_string(s): words = s.split() # 若整行所有单词都属于待移除词汇,直接保留原字符串 if all(word in words_to_remove for word in words): return s # 过滤掉待移除词汇后拼接成新字符串 filtered_words = [word for word in words if word not in words_to_remove] return ' '.join(filtered_words) # 应用处理函数到目标列 df['strings_variable'] = df['strings_variable'].apply(process_string) print(df)
代码说明
- 词汇集合转换:将
words_to_remove转为集合,相比元组,集合的成员查找操作效率更高,适合处理大量数据场景。 - 字符串处理逻辑:
- 先将单个字符串拆分为单词列表;
- 用
all()判断当前字符串的所有单词是否都属于待移除词汇,若是则直接返回原字符串(满足保留全移除词汇行的需求); - 若不是,则过滤掉属于待移除词汇的单词,再将剩余单词拼接为新字符串。
- Pandas列处理:通过
apply()方法将处理函数批量应用到strings_variable列的每个元素上,完成整列数据的更新。
原代码问题分析
- 未对字符串进行拆分,直接遍历DataFrame对象,逻辑混乱;
- 缺少对「整行全由待移除词汇构成」的判断逻辑,无法保留这类行;
- 列表推导式的遍历语法错误,
[word for words in df if word not in words_to_remove]没有正确处理每个字符串的单词拆分。
内容的提问来源于stack exchange,提问作者RoyalPotatoe
相关产品推荐
相关产品推荐

