如何使用Python删除列值特殊字符并保留指定符号
调整pandas字符清洗规则的实现方案
你现有代码的核心问题是\W正则会匹配所有非字母、数字、下划线的字符,会将你需要保留的/、-、.也一并删除,同时原有apply的写法存在逻辑错误:apply遍历列元素时传入的是单个字符串,调用astype(str)会触发报错,直接对整列做类型转换即可。
正确的实现代码如下:
# 正则匹配所有不在「大小写字母、数字、/、_、-、.」范围内的字符,替换为空 df['column1'] = df['column1'].astype(str).str.replace(r'[^a-zA-Z0-9/_\-\.]', '', regex=True)
正则规则说明:
- 中括号内的
^代表反向匹配,即仅匹配不在括号内枚举的字符 - 首先保留所有基础合法字符:
a-zA-Z0-9对应大小写字母和数字 - 额外保留指定的四类符号:
/、_、-、.,这里-放在_和.之间避免被正则识别为范围匹配符,你也可以将它放在中括号的最开头或最结尾 - 显式指定
regex=True是为了兼容pandas各版本的默认参数配置,避免运行报错
运行上述代码后即可得到你给出的期望输出结果。
内容的提问来源于stack exchange,提问作者NKJ
相关产品推荐
相关产品推荐

