如何在Pandas DataFrame中移除描述列中的对应书名?
解决方法
先说说你之前两种写法的问题:
第一种
replace写法的问题:- 当
to_replace传入Series时,Pandas会按索引逐行匹配,也就是第i行的Description只会尝试替换第i行的整个title字符串(整词匹配),而不是title拆分后的单个单词。如果你的title是多词组合(比如"The Brooklyn Bridge"),正则只会匹配完整的短语,无法匹配Description里单独出现的"The"、"Brooklyn"这类单词。
- 当
第二种循环写法的问题:
- 遍历
df['Description']拿到的是字符串副本,修改它不会同步到原DataFrame; if word == strings的判断逻辑错误,只有当整个Description完全等于某个title单词时才会执行替换,而不是Description中包含该单词;strings.replace(word, ' ')默认只替换第一个匹配项,且没有做整词匹配,容易误替换其他单词的部分字符。
- 遍历
正确实现方式
针对每行的Description,移除对应行title中的所有单词,同时保证整词匹配、不影响原DataFrame,用apply逐行处理即可,千级数据完全够用:
import re def clean_description(row): # 拆分title为单个单词,转义正则特殊字符(比如.、?等) title_terms = [re.escape(word) for word in row['title'].split()] # 生成匹配任意title单词的整词正则 pattern = r'\b(' + '|'.join(title_terms) + r')\b' # 替换所有匹配项,清理多余空格 cleaned = re.sub(pattern, '', row['Description']) # 把连续空格替换为单个,再去除首尾空格 return re.sub(r'\s+', ' ', cleaned).strip() # 应用到DataFrame,覆盖原Description列 df['Description'] = df.apply(clean_description, axis=1)
可选优化
如果需要忽略大小写匹配(比如title是"The",Description里是"the"),可以在re.sub里加上flags=re.IGNORECASE参数:
cleaned = re.sub(pattern, '', row['Description'], flags=re.IGNORECASE)
内容的提问来源于stack exchange,提问作者orangechair
相关产品推荐
相关产品推荐

