首页 > 解决方案 > 在保留字母数字单词的同时删除特殊字符

问题描述

我正在清理具有以下内容的数据集:

[在]

my_Series = pd.Series(["-","ASD", "711-AUG-M4G","Air G2G", "Karsh"])
my_Series.str.replace("[^a-zA-Z]+", " ")

[出去]

0            
1         ASD
2     AUG M G
3     Air G G
4       Karsh

[理想出局]

0            
1         ASD
2     AUG M4G
3     Air G2G
4       Karsh

我的目标是删除特殊字符和数字,但它有一个包含字母数字的单词,它应该保留。任何人都可以帮忙吗?

标签: regexpython-3.xpandas

解决方案


尝试使用apply以实现理想的输出。

>>> my_Series = pd.Series(["-","ASD", "711-AUG-M4G","Air G2G", "Karsh"])

输出:

>>> my_Series.apply(lambda x: " ".join(['' if word.isdigit() else word for word in x.replace('-', ' ').split()]))

0            
1         ASD
2     AUG M4G
3     Air G2G
4       Karsh
dtype: object

解释:

我已经-用. 然后检查单词是否为数字。spacespaces

如果是数字,则用空字符串替换,否则用实际单词替换。

最后,我们加入了名单。

编辑1:

正则表达式解决方案: -

>>> my_Series.str.replace("((\d+)(?=.*\d))|([^a-zA-Z0-9 ])", " ")
0             
1          ASD
2      AUG M4G
3      Air G2G
4        Karsh
dtype: object

解释:

使用环视

((\d+)(?=.*\d))|([^a-zA-Z0-9 ])

(如果后面有任何其他数字,则该数字位于最后)(允许字母数字)


推荐阅读