如何用Python Pandas正则保留冒号并移除列名其他特殊字符
问题:保留Pandas列名中的冒号,同时删除其他特殊字符
原始DataFrame
COL1 | XX:\x84Â\x82Ă\x82Â\ | \x84Â\x82Ă\PPx82Â\ -------|----------------------|-------------------- 111 | ABC | X 222 | CCC | Y 333 | DDD | XX
现有代码及问题
用以下代码删除列名特殊字符时,冒号也被一并删除了:
import re new_names = {col: re.sub(r'[^A-Za-z0-9_]+', '', col) for col in df.columns} new_n_list = list(new_names.values())
当前输出:
[COL1, XX_A, PP]
需求
修改代码,保留列名中的冒号,同时删除其他特殊字符,期望输出:
[COL1, XX:A, PP]
解决方案
把正则表达式里允许保留的字符集合加上冒号:即可,修改后的代码如下:
import re new_names = {col: re.sub(r'[^A-Za-z0-9_:]+', '', col) for col in df.columns} new_n_list = list(new_names.values())
说明
原正则[^A-Za-z0-9_]+的作用是匹配所有不在字母、数字、下划线范围内的字符并替换为空。现在把冒号加入允许集合后,正则只会删除冒号之外的特殊字符,冒号会被保留下来。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

