如何用Python移除DataFrame列中两个指定单词之间的文本
问题原因
你现有代码的问题在于str(a)是将整个df['textcol'] Series对象整体转为了字符串格式(就是你直接print这个列时看到的包含索引、多行行预览的完整字符串),re.sub处理的是这一整个长字符串,最终得到的单个字符串被广播赋值到列的所有行,才会出现所有行内容一致的问题。
正确解法
优先用pandas原生的字符串正则替换方法,不需要手动逐行处理,且会自动跳过不匹配的行,保留原内容:
import re df['textcol'] = df['textcol'].str.replace(r'Original.*?Subject', '', regex=True, flags=re.DOTALL)
如果数据量较小,也可以用apply逐行调用re.sub实现相同效果,还可以额外兼容空值等异常场景:
import re def clean_row_text(text): # 非字符串内容直接返回,避免正则处理报错 if not isinstance(text, str): return text return re.sub(r'Original.*?Subject', '', text, flags=re.DOTALL) df['textcol'] = df['textcol'].apply(clean_row_text)
内容的提问来源于stack exchange,提问作者Arica Christensen
相关产品推荐
相关产品推荐

