pandas DataFrame中OriginalTweet列文本清洗未正常生效求助
问题排查思路
- 正则覆盖范围不全:你当前写的正则仅能匹配
http:///https://开头的标准URL,完全没覆盖三类需要清理的目标内容:一是@用户名格式的提及符号,二是//xxx格式的协议相对路径,三是链接之外的其他特殊符号;另外正则中写的&是HTML转义后的和号,原始文本里如果是直接的&字符无法被匹配到。 - 数据类型异常未处理:如果
OriginalTweet列存在非字符串值(比如NaN缺失值、数值类型条目),re.sub执行时不会抛出编译/运行错误,但会直接返回原始值,最终表现为清洗不生效。 - 未做单例验证:全量调用
apply前没有拿已知带脏内容的单条文本测试函数效果,无法快速定位是正则匹配失效还是数据本身的问题。
可落地解决方案
完整清洗逻辑需要覆盖你提到的所有无关内容,代码如下,可直接复用:
import re # 如果存在HTML转义字符需要额外导入html模块 # import html def clean_tweet_content(text): # 先兜底处理非字符串类型的异常值 if not isinstance(text, str): return "" # 如有HTML转义字符先还原,避免转义残留 # text = html.unescape(text) # 移除@提及 text = re.sub(r'@\w+', '', text) # 移除所有链接:覆盖http/https开头、//开头的路径类内容 text = re.sub(r'https?://\S+|//\S+', '', text) # 移除剩余无关特殊符号,仅保留中英文、数字、常用标点 text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\s,.!?%-]', '', text) # 合并清洗后产生的多余空格,去掉首尾空白 text = re.sub(r'\s+', ' ', text).strip() return text # 对目标列应用清洗函数 train_data['OriginalTweet'] = train_data['OriginalTweet'].apply(clean_tweet_content)
代码里注释掉的HTML转义处理逻辑,如果你查看原始数据发现存在
&"这类转义片段,把注释去掉即可生效。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

