如何解决Pandas列用replace删除•字符后仍可检测到该字符的问题
问题根因
Pandas 中Series.replace()方法默认执行全值匹配逻辑,仅当单元格的完整内容完全等于你指定的u'•'字符时才会触发替换,若圆点只是单元格字符串中的一部分,默认配置下不会做子串替换,这就是你执行替换后仍能检测到该字符的原因。
两种可行解决方案
- 方案一:为
replace方法开启正则匹配参数
开启regex=True后replace会按子串规则匹配替换,修改代码如下:
users_df['LASTNAME_TEST'] = users_df['LASTNAME'].replace(u'•', '', regex=True)
- 方案二:使用字符串专用的
str.replace方法
Pandas 字符串类型列的str访问器下的replace方法默认就是子串匹配,更适配这类场景,建议优先使用:
# 加regex=False明确传入的是普通字符串,避免特殊符号被当作正则规则解析 users_df['LASTNAME_TEST'] = users_df['LASTNAME'].str.replace(u'•', '', regex=False)
验证替换效果
不需要循环遍历,可以直接用内置方法快速统计剩余包含目标字符的单元格数量:
# na=False是忽略空值避免报错 print(users_df['LASTNAME_TEST'].str.contains(u'•', na=False).sum())
输出结果为0即说明所有圆点都已被清理完成。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

