为什么pandas的replace方法无法替换符号“.”?
问题原因
regex=True时失效的核心原因是.是正则特殊字符,代表匹配任意单个字符,你写的规则无法精准匹配文本中的字面量.符号,自然替换失效。你代码中写的"是HTML实体字符,从Excel读取的文本里存储的是实际双引号",规则和实际内容不匹配也会导致替换失败。regex=False时失效的原因是pandas的Series.replace()在非正则模式下默认执行全值匹配,只有整个单元格的内容完全等于./,/"才会替换,你的单元格是包含目标符号的长文本,不会触发匹配逻辑。- 文本里的表情符号不会导致替换失败,和你当前遇到的问题无关。
解决方案
方案1:正则模式下修正匹配规则
给特殊正则字符加转义符,同时把"改成实际要匹配的双引号":
import pandas as pd data = pd.read_excel('pos indonesia.xlsx') data1 = data['content'] # 转义正则特殊字符. 匹配字面量的点符号 datacek = data1.replace({'\.':'', ',':'', '"':''}, regex=True)
方案2:用str.replace做子串匹配(更易上手)
Series.str.replace()默认对文本做子串匹配,非正则模式下直接匹配字面量符号,不需要考虑转义:
import pandas as pd data = pd.read_excel('pos indonesia.xlsx') data1 = data['content'] datacek = data1.str.replace('.', '', regex=False)\ .str.replace(',', '', regex=False)\ .str.replace('"', '', regex=False)
如果你的文本中确实存在HTML实体",额外加一行替换即可:
datacek = datacek.str.replace('"', '', regex=False)
内容的提问来源于stack exchange,提问作者Dwi Setyo Aji
相关产品推荐
相关产品推荐

