【问题标题】:Removing special characters while retaining alpha numeric words在保留字母数字单词的同时删除特殊字符
【发布时间】:2019-11-21 20:33:31
【问题描述】:

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

[输入]

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

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

【问题讨论】:

  • 您的输入和输出数据之间存在相当大的差异。你能澄清一下吗?
  • @TimBiegeleisen,对此感到抱歉。我更新了代码以使其更有意义。我创建了一个列表并将其转换为 pandas 系列以使用导致 OUT 的正则表达式获取和替换,但我想要的是保留基于 [IDEAL OUT] 的字母数字单词

标签: regex python-3.x pandas


【解决方案1】:

尝试使用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

说明:

我已将 - 替换为 space 并在 spaces 上拆分字符串。然后检查单词是否为数字。

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

我们终于要加入名单了。

编辑 1:

正则表达式解决方案 :-

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

说明:

使用lookaround

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

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

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 2018-11-29
    • 2012-05-30
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多