【问题标题】:How to use Regular Expression to remove repeated characters Python如何使用正则表达式删除重复字符 Python
【发布时间】:2020-05-05 22:23:41
【问题描述】:

下面是 df 列中唯一值的列表

aa                2     
aaa               10    
aaaa              14    
aaaaa             2     
aaaaaa            1     
aableasing        25    
yy                1     
yyy               6        
überimexcars      1     
üüberimexcars     1     
üüüüüüüüü         2     

目的是通过按名称分组来“清理”数据。

因此:

  • aa = aaa = aaaa
  • ü = üüü = üüüüüü
  • ...

所需的输出如下所示

a                 29      
aableasing        25    
y                 7           
überimexcars      2  
üüüüüüüüü         2   

我在想类似的东西

df['name'] = df['name'].astype(str).str.replace('aaa', 'a')

但是,我必须为每个字母都这样做。此外,这样做的效率并不高。

在这种情况下使用正则表达式可能是更好的选择?

感谢任何提供帮助的人!

【问题讨论】:

  • 这是您正在寻找的东西link
  • 没错!谢谢,它正在做这项工作。 df['name'] = df['name'].astype(str).str.replace(r'([a-z])\1+', r'\1')

标签: python pandas


【解决方案1】:

这应该可以解决问题:

df['name']=df['name'].replace(r"^(.)\1*$", r"\1", regex=True)

一些解释:

它将尝试将整个单元格(从开头 - ^ 到结尾 - $)与任何字符 (.) 匹配,然后重复 0 次或多次(参考第一组,表示方括号) - \1* 并且所有这些都将被替换为第一组\1

【讨论】:

    【解决方案2】:

    如果 t 包含一个字符串,例如'aaaa',请尝试以下操作:

    t.join(sorted(set(t), key=t.index))
    

    你会得到'a'。

    现在在你的数据框和组上运行它

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多