You need to enable JavaScript to run this app. 咨询Pandas处理DataFrame时移除@开头子串、按用户名与清洗文本去重的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

咨询Pandas处理DataFrame时移除@开头子串、按用户名与清洗文本去重的实现方法

文本清洗与重复行处理实现方案

项目核心目标

个人项目开发中需要完成两项数据处理操作:

  • 从存储文本内容的列中,移除所有以@开头的提及类子串
  • 文本清洗完成后,删除同时具备相同username、相同清洗后文本的重复行

初始DataFrame结构示例

username      text
A           @john testing this!
B           @john what is up?
A           @smudge @renge testing this!

预期最终输出结果

username      text
A           testing this!
B           what is up?

当前已尝试的实现与现存问题

最初编写的实现逻辑如下:

# 生成清洗后的临时文本列
df['clean_text']=df['text'].str.replace('(@\w+.*?)',"")
# 基于用户名、清洗后文本去重
df = df.drop_duplicates(subset = ['clean_text', 'username'])

后续参考公开方案做了两项调整,重复行依旧无法正常清除:

  • 将正则替换规则修改为(@\w+\s*)
  • 执行df.columns = df.columns.str.strip()去除所有列名的首尾空格

失效原因定位

之前的实现存在两个核心漏洞:

  • 第一版正则规则(@\w+.*?)匹配范围错误,非贪婪匹配从@位置开始会吞掉后续大段非目标内容,完全达不到只删除@提及的效果;后续调整的(@\w+\s*)虽然覆盖了大部分@提及场景,但没有处理清洗后文本残留的首尾多余空格。
  • 去重环节没有对清洗后文本做空格裁剪,字符串的隐形首尾空格差异,会让pandas将语义完全一致的文本判定为不同值,直接导致去重逻辑失效。

可直接复用的实现代码

import pandas as pd
import re

# 匹配所有@开头、后接非空白字符的提及内容,替换后自动裁剪首尾空格
at_pattern = re.compile(r'@\S+')
df['clean_text'] = df['text'].str.replace(at_pattern, '', regex=True).str.strip()

# 基于用户名、裁剪后的清洗文本去重,保留首次出现的行
df = df.drop_duplicates(subset=['username', 'clean_text'], keep='first')

# 可选操作:将清洗后的内容覆盖回原text列,删除临时生成的clean_text列
df['text'] = df['clean_text']
df = df.drop(columns=['clean_text']).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 03:06:05