如何清理Pandas DataFrame文本列:删除placeholder及前导3位字符?
解决方法
你之前的问题出在正则表达式的匹配方向错了——你写的^\d+\s+是匹配字符串开头的数字加空格,但实际要删的数字是在文本末尾,而且是和placeholder绑定在一起的,直接一步替换掉「3位数字+placeholder」的组合就行,不用分两次操作。
直接一步到位的正则替换
用这个代码就能一次性完成清理:
import pandas as pd # 构造测试用的DataFrame data = { 'Group': [1, 1, 2, 2], 'Attribute': ['A', 'A', 'A', 'B'], 'Text': [ "'The ball is red456placeholder'", "'I like pizza985placeholder.'", "'Fire bad 231placeholder'", "'Sparkling water makes me happy777placeholder'" ] } df = pd.DataFrame(data) # 核心清理操作:匹配3位数字+placeholder的组合,替换为空 df['Text'] = df['Text'].str.replace(r'\d{3}placeholder', '', regex=True)
运行后Text列的结果会是:
0 'The ball is red' 1 'I like pizza.' 2 'Fire bad ' 3 'Sparkling water makes me happy'
可选:清理末尾多余空格
如果像第三行那样替换后末尾留了空格,可以再加一步去掉首尾的单引号和多余空格:
# 同时完成替换、去引号、去首尾空格 df['Text'] = df['Text'].str.replace(r'\d{3}placeholder', '', regex=True).str.strip("' ").str.strip()
最终结果就会变成:
0 The ball is red 1 I like pizza. 2 Fire bad 3 Sparkling water makes me happy
为什么你之前的正则没用?
你写的r'^\d+\s+'是匹配字符串开头的1个以上数字加空格,但你的数据里数字全在文本末尾,根本匹配不到任何内容,所以替换后没有变化。
内容的提问来源于stack exchange,提问作者user2813606
相关产品推荐
相关产品推荐

