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

如何在Pandas DataFrame中移除描述列中的对应书名?

解决方法

先说说你之前两种写法的问题:

  1. 第一种replace写法的问题:

    • 当to_replace传入Series时,Pandas会按索引逐行匹配,也就是第i行的Description只会尝试替换第i行的整个title字符串(整词匹配),而不是title拆分后的单个单词。如果你的title是多词组合(比如"The Brooklyn Bridge"),正则只会匹配完整的短语,无法匹配Description里单独出现的"The"、"Brooklyn"这类单词。
  2. 第二种循环写法的问题:

    • 遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:15:40